vistas vista usar una pasar pagina mvc multiples mostrar modelos modelo misma datos controlador asp asp.net-mvc controller ienumerable html.beginform

usar - ASP.NET MVC, pasando el modelo de la vista al controlador



pasar dos modelos a una vista razor (2)

  1. En @ Html.TextBoxFor (stuff => otherstuff), material es el modelo de su Vista, otherstuff es el miembro público de su modelo.
  2. Como en la Vista desea representar elementos de entrada para el miembro modelo de un tipo de colección (Lista), primero debe crear una vista parcial separada para representar un solo elemento de esa colección (Proceso). Se parecería a esto (póngalo como Process.cshtml, por ejemplo, y colóquelo en la carpeta / Views / Shared):

    @model List<PROJ.Models.Process> @Html.TextBoxFor(model => p.value)

Entonces, su vista principal se vería así:

@model PROJ.Models.InputModel @using(Html.BeginForm()) { foreach(PROJ.Models.Process p in Model.axProc){ @Html.Partial("Process", p) } <input type="submit" value="SEND" /> }

Además, compruebe que el método loadInputModel () realmente devuelve algo, por ejemplo, no una lista vacía.

Estoy teniendo problemas con ASP.NET MVC y paso datos de View to Controller. Tengo un modelo como este:

public class InputModel { public List<Process> axProc { get; set; } public string ToJson() { return new JavaScriptSerializer().Serialize(this); } } public class Process { public string name { get; set; } public string value { get; set; } }

Creo este InputModel en mi Controlador y lo paso a la Vista:

public ActionResult Input() { if (Session["InputModel"] == null) Session["InputModel"] = loadInputModel(); return View(Session["InputModel"]); }

En mi archivo Input.cshtml, tengo un código para generar el formulario de entrada:

@model PROJ.Models.InputModel @using(Html.BeginForm()) { foreach(PROJ.Models.Process p in Model.axProc){ <input type="text" /> @* @Html.TextBoxFor(?? => p.value) *@ } <input type="submit" value="SEND" /> }

Ahora cuando hago clic en el botón de enviar, quiero trabajar con los datos que se colocaron en los campos de texto.

PREGUNTA 1: He visto esto @ Html.TextBoxFor (), pero realmente no consigo este "material => otro material". Llegué a la conclusión de que el "otro material" debería ser el campo en el que quiero que se escriban mis datos, en este caso, probablemente sea "p.valor". Pero, ¿qué es lo de "cosas" frente a la flecha?

De vuelta en el controlador, tengo una función para el POST con algo de depuración:

[HttpPost] public ActionResult Input(InputModel m) { DEBUG(m.ToJson()); DEBUG("COUNT: " + m.axProc.Count); return View(m); }

Aquí, la depuración solo muestra algo como:

{"axProc":[]} COUNT: 0

Entonces, el Modelo devuelto que obtengo está vacío.

PREGUNTA 2: ¿Estoy haciendo algo fundamentalmente incorrecto con este @using (Html.BeginForm ())? ¿No es esta la elección correcta aquí? Si es así, ¿cómo puedo obtener mi modelo lleno de datos de vuelta al controlador?
(No puedo usar "@model List <Process>" aquí (porque el ejemplo anterior está abreviado, en el código real habría más cosas).)

Espero que alguien pueda contarme algunos de los detalles que estoy pasando por alto.


Cambia tu vista a algo así para vincular correctamente la lista en el envío del formulario.

@using(Html.BeginForm()) { for(int i=0;i<Model.axProc.Count;i++){ <span> @Html.TextBoxFor(model => model.axProc[i].value) </span> } <input type="submit" value="SEND" /> }