asp.net-mvc razor viewdata html.hiddenfor

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.