asp.net mvc - tag - Pasar un modelo completo en forma de presentación
select asp-for asp-items (5)
Entiendo que puedo usar @Html.HiddenFor(m => m.parameter)
y cuando se @Html.HiddenFor(m => m.parameter)
el formulario, ese parámetro se pasará al controlador. Mi modelo tiene muchas propiedades.
¿Hay una manera más corta de pasar todo el modelo de una vez al controlador o debo hacerlo uno por uno cada vez?
El modelo completo se publicará si está utilizando un elemento FORM. Sus elementos que usan el Modelo obviamente deben estar dentro del elemento de formulario
También puede POSTAR el formulario usted mismo usando JQuery
Ver este otro problema de pila para eso: jQuery AJAX enviar formulario
Eche un vistazo de cerca a la respuesta por "Alfrekjv"
El modelo se pasará al controlador en su totalidad, pero los valores de las propiedades que no están vinculados por la entrada o los campos ocultos se perderán.
Debe vincular las propiedades del formulario en el lado del cliente o volver a buscar la entidad en el lado del servidor.
Parece que estás pidiendo algo como @Html.HiddenFor(m => m.Model)
, y eso no es posible. Lo siento
Una cosa a tener en cuenta, si tiene toneladas de campos ocultos, es posible que esté enviando más datos a la vista de los que realmente necesita. Considere emplear modelos de vista
Esto ya está incorporado. Considere este modelo:
public class MyModel
{
public string PropertyA { get; set; }
public string parameter { get; set; }
}
y ahora considera esta acción:
[HttpPost]
public ActionResult PostSomeData(MyModel model)
{
}
MVC aprovechará FormCollection
y completará la clase MyModel
donde pueda. Si no tiene el PropertyA
en el formulario, será null
. Pero como tiene una input
para la propiedad del parameter
, se rellenará.
Para cualquier persona que vea esto, puedes hacer un @ Html.EditorForModel () en un div oculto. También tendría que usar @ Html.EditorFor (model => model.ObjectProperty) para cada propiedad de objeto del modelo.
<div hidden="hidden">
@Html.EditorForModel()
@Html.EditorFor(model => model.ObjectProperty)
@Html.EditorFor(model => model.ListOfObjectsProperty)
</div>
Puede verificar solo las propiedades que desee:
if (this.ModelState.IsValidField("Name"))
{
// .....
}
en lugar de:
if (this.ModelState.IsValid)
{
// .....
}