Tengo un campo obligatorio, atributo de cadena {get; set} en una clase y quiere establecer su valor en razor. ¿Es posible algo como lo siguiente?Cómo establecer @ model.attribute en la vista de afeitar?
@model.attribute = "whatever'
Tengo un campo obligatorio, atributo de cadena {get; set} en una clase y quiere establecer su valor en razor. ¿Es posible algo como lo siguiente?Cómo establecer @ model.attribute en la vista de afeitar?
@model.attribute = "whatever'
En primer lugar, las mayúsculas son importantes.
@model
("m" minúscula) es una palabra clave reservada en las vistas de la maquinilla de afeitar para declarar el tipo de modelo en la parte superior de la vista, por ejemplo:
@model MyNamespace.Models.MyModel
Más adelante en el archivo, se puede hacer referencia a la atributo que desea con @Model.Attribute
(mayúscula "M").
@model
declara el modelo. Model
hace referencia a la ejemplificación del modelo.
En segundo lugar, puede asignar un valor a su modelo y usarlo más adelante en la página, pero no será persistente cuando la página envíe a la acción del controlador a menos que sea un valor en un campo de formulario. Con el fin de obtener el valor de vuelta en su modelo durante el proceso de enlace de modelos, es necesario asignar el valor a un campo de formulario, por ejemplo:
Opción 1
en su acción de controlador que necesita para crear una modelo para la primera vista de su página; de lo contrario, cuando intente establecer Model.Attribute
, el objeto Model
será nulo.
controlador:
// This accepts [HttpGet] by default, so it will be used to render the first call to the page
public ActionResult SomeAction()
{
MyModel model = new MyModel();
// optional: if you want to set the property here instead of in your view, you can
// model.Attribute = "whatever";
return View(model);
}
[HttpPost] // This action accepts data posted to the server
public ActionResult SomeAction(MyModel model)
{
// model.Attribute will now be "whatever"
return View(model);
}
Vista:
@{Model.Attribute = "whatever";} @* Only do this here if you did NOT do it in the controller *@
@Html.HiddenFor(m => m.Attribute); @* This will make it so that Attribute = "whatever" when the page submits to the controller *@
Opción 2
O, ya que los modelos están basados en nombres, puede omitir la creación del modelo de su controlador y justo nombre un campo de formulario con el mismo nombre que la propiedad de su modelo. En este caso, establecer un campo oculto llamado "Atributo" en "lo que sea" garantizará que cuando se envíe la página, el valor "lo que sea" se vincule a la propiedad Attribute
de su modelo durante el proceso de vinculación del modelo. Tenga en cuenta que no tiene que ser un campo oculto, simplemente cualquier campo de entrada HTML con name="Attribute"
.
controlador:
public ActionResult SomeAction()
{
return View();
}
[HttpPost] // This action accepts data posted to the server
public ActionResult SomeAction(MyModel model)
{
// model.Attribute will now be "whatever"
return View(model);
}
Vista:
@Html.Hidden("Attribute", "whatever");
Gracias por esto. Gran respuesta. – levteck
Esta respuesta debería ir al salón de la fama – petric