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 datos desde el servidor a la vista usando los modelos pasados de mi controlador a la vista, pero no estoy seguro de cómo pasar los datos de la vista a mi controlador.
Solo necesito pasar una cadena de la vista al controlador en este caso.
Se agradecerá cualquier consejo con ejemplo.
ACTUALIZAR
Entiendo que tengo que publicar los datos en el servidor, pero ¿cómo se realiza en forma de código y controlador razorhtml?
asp.net
asp.net-mvc
Ahmed
fuente
fuente
Respuestas:
Puede hacerlo con ViewModels, como la forma en que pasó datos de su controlador para ver.
Suponga 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 escrita para
ReportViewModel
@model ReportViewModel @using(Html.BeginForm()) { Report NAme : @Html.TextBoxFor(s=>s.Name) <input type="submit" value="Generate report" /> }
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 POCO (Viewmodels)
@using(Html.BeginForm()) { <input type="text" name="reportName" /> <input type="submit" /> }
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")) { <input type="text" name="reportName" /> <input type="submit" /> }
¿Pasando datos del método de acción a la vista?
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 vista
@model ReportViewModel <h2>@Model.Name</h2> <p>Can have input field with value set in action method</p> @using(Html.BeginForm()) { @Html.TextBoxFor(s=>s.Name) <input type="submit" /> }
fuente
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 número de parámetros de esta manera, pero más de 2 o 3 (algunos argumentarán siempre) debería pasar un modelo a través de un POST ( según otra respuesta)
Editar : Se agregó nulo para una sobrecarga correcta como se señaló en los comentarios. Hay una serie de sobrecargas y si especifica tanto acción + controlador, entonces necesita routeValues y htmlAttributes. Sin el controlador (solo título + acción), solo se necesitan routeValues, pero puede ser una buena práctica especificar siempre ambos.
fuente
<form action="myController/myAction" method="POST"> <input type="text" name="valueINeed" /> <input type="submit" value="View Report" /> </form>
controlador:
[HttpPost] public ActionResult myAction(string valueINeed) { //.... }
fuente