asp.net mvc - La propiedad Html.HiddenFor value no se establece
asp.net-mvc razor (4)
Podría haber usado
@Html.HiddenFor(x=> ViewData["crn"])
pero, entiendo,
<input id="ViewData_crn_" name="ViewData[crn]" type="hidden" value="500" />
Para evitar de alguna manera ese problema ( id=ViewData_crn_ and name=ViewData[crn]
), intenté hacer lo siguiente, pero el atributo "value" no se está configurando.
@Html.HiddenFor(x => x.CRN, new { @value="1"})
@Html.HiddenFor(x => x.CRN, new { @Value="1"})
genera
<input id="CRN" name="CRN" type="hidden" value="" />
<input Value="500" id="CRN" name="CRN" type="hidden" value="" />
¿¿Estoy haciendo algo mal?? Gracias
¿Has probado usar un modelo de vista en lugar de ViewData? Los ayudantes fuertemente tipados que terminan con For
y toman una expresión lambda no pueden funcionar con estructuras débilmente tipadas como ViewData
.
Personalmente no uso ViewData / ViewBag. Defino los modelos de vista y hago que mis acciones de controlador pasen esos modelos de vista a mis vistas.
Por ejemplo, en su caso definiría un modelo de vista:
public class MyViewModel
{
[HiddenInput(DisplayValue = false)]
public string CRN { get; set; }
}
hacer que mi acción de controlador llene este modelo de vista:
public ActionResult Index()
{
var model = new MyViewModel
{
CRN = "foo bar"
};
return View(model);
}
y luego tener mi vista fuertemente EditorFor
simplemente use un EditorFor
ayudante:
@model MyViewModel
@Html.EditorFor(x => x.CRN)
que me generaría:
<input id="CRN" name="CRN" type="hidden" value="foo bar" />
en el HTML resultante.
Creo que hay una solución más simple. Debe usar Html.Hidden
lugar de Html.HiddenFor
. Mira:
@Html.Hidden("CRN", ViewData["crn"]);
Esto creará una etiqueta INPUT
de type="hidden"
, con id="CRN"
y name="CRN"
, y el valor correcto dentro del atributo de value
.
¡Espero eso ayude!
Lo siguiente funcionará en MVC 4
@Html.HiddenFor(x => x.CRN, new { @Value = "1" });
La propiedad @Value distingue entre mayúsculas y minúsculas. Necesita una ''V'' mayúscula en @Value .
Aquí está mi modelo
public int CRN { get; set; }
Aquí está lo que se muestra en html cuando miras en el navegador
<input value="1" data-val="true" data-val-number="The field CRN must be a number." data-val-required="The CRN field is required." id="CRN" name="CRN" type="hidden" value="1"/>
Aquí está mi método
[HttpPost]
public ActionResult MyMethod(MyViewModel viewModel)
{
int crn = viewModel.CRN;
}
Tenga en cuenta que el segundo parámetro para @ Html.HiddenFor solo se usará para establecer el valor cuando no pueda encontrar datos de rutas o modelos que coincidan con el campo. Darin es correcto, usa el modelo de vista.