ASP.Net MVC Cómo pasar datos de la vista al controlador

Soy completamente nuevo en ASP.Net y estoy seguro de que esta es una pregunta muy básica. Tengo una Vista en la que hay un enlace para generar un informe, pero para poder generar un informe, debo pedirle al usuario que proporcione un nombre de texto adecuado como bien.

Hasta ahora he podido pasar los datos del servidor para verlos usando Modelos pasados ​​desde mi controlador para verlos, pero no estoy seguro de cómo pasar los datos de la vista a mi controlador.

Solo necesito pasar una cadena desde la vista al controlador en este caso.

Cualquier consejo con el ejemplo será apreciado.

ACTUALIZAR

Entiendo que tengo que volver a publicar los datos en el servidor, pero ¿cómo se da cuenta en forma de código razorhtml y controlador?

Puede hacerlo con ViewModels, por ejemplo, cómo pasó datos de su controlador para ver.

Supongamos que tiene un modelo de vista como este

public class ReportViewModel { public string Name { set;get;} } 

y en tu Acción GET,

 public ActionResult Report() { return View(new ReportViewModel()); } 

y su vista debe estar fuertemente ReportViewModel a ReportViewModel

 @model ReportViewModel @using(Html.BeginForm()) { Report NAme : @Html.TextBoxFor(s=>s.Name)  } 

y en su método de acción HttpPost en su controlador

 [HttpPost] public ActionResult Report(ReportViewModel model) { //check for model.Name property value now //to do : Return something } 

O simplemente, puede hacer esto sin las clases de POCO (Viewmodels)

 @using(Html.BeginForm()) {   } 

y en su acción HttpPost, use un parámetro con el mismo nombre que el nombre del cuadro de texto.

 [HttpPost] public ActionResult Report(string reportName) { //check for reportName parameter value now //to do : Return something } 

EDITAR: según el comentario

Si desea publicar en otro controlador, puede usar esta sobrecarga del método BeginForm.

 @using(Html.BeginForm("Report","SomeOtherControllerName")) {   } 

Pasar datos del método de acción para ver?

Puede usar el mismo modelo de vista, simplemente establezca los valores de propiedad en su método de acción GET

 public ActionResult Report() { var vm = new ReportViewModel(); vm.Name="SuperManReport"; return View(vm); } 

y en tu opinión

 @model ReportViewModel 

@Model.Name

Can have input field with value set in action method

@using(Html.BeginForm()) { @Html.TextBoxFor(s=>s.Name) }

En caso de que no quiera / necesite publicar:

 @Html.ActionLink("link caption", "actionName", new { Model.Page }) // view's controller @Html.ActionLink("link caption", "actionName", "controllerName", new { reportID = 1 }, null); [HttpGet] public ActionResult actionName(int reportID) { 

Tenga en cuenta que el ID de informe en la nueva {} parte coincide con el ID de informe en los parámetros de acción, puede agregar cualquier cantidad de parámetros de esta manera, pero más de 2 o 3 (algunos argumentarán siempre) debe pasar un modelo a través de un POST ( según otra respuesta)

Editar : Añadido nulo para la sobrecarga correcta como se señala en los comentarios. Hay una cantidad de sobrecargas y si especifica tanto action + controller, entonces necesita tanto routeValues ​​como htmlAttributes. Sin el controlador (solo leyenda + acción), solo se necesitan valores de ruta pero puede ser una buena práctica especificar siempre ambos.

 

controlador:

 [HttpPost] public ActionResult myAction(string valueINeed) { //.... }