2010-08-31 16 views
16

estoy tratando de hacer esta simple cosa¿Por qué mvc Html.HiddenFor no representa mi campo?

el modelo es

[HiddenInput(DisplayValue=true)] 
public int Id { get; set; } 

pero siempre conseguir esto rindió

<input type="hidden" value="0" name="UserInfo.Id" id="UserInfo_Id"> 

he cheque y el ID no se 0 ..?!

necesita alguna explicación aquí ...

Editar

El problema parece de ser la cosa puesto mencionado a continuación. Este está trabajando

<input type="hidden" value="<%= Html.AttributeEncode(Model.Id) %>" id="<%= Html.IdFor(model=>model.Id)%>" name="<%= Html.NameFor(model=>model.Id)%>" /> 

Gracias a Manaf

+0

¿Qué sucede cuando coloca el mismo campo en un 'textboxfor' normal? – Stefanvds

Respuesta

23

No estoy seguro de si este es el caso con usted, pero el Html.HiddenFor() "qué valores correctos no de salida después de un post si se cambia el valor durante el período post " y este no es un error, fue diseñado de esa manera.

Más información Here

Quick Fix:

No utilice el ayudante, prueba este lugar:

<input type="hidden" value="<%= Html.AttributeEncode(model.Id) %>" id="Id" name="Id" /> 

siempre ha trabajado para mí :)

+0

Gracias ese fue el caso. – mateo

+1

de hecho, deberíamos hacer esto para manejar el modelo complejo mateo

+0

Me alegro de poder ayudar :) –

4

Para añadir a la respuesta correcta de Manaf: notas correctamente que el problema ocurre en las acciones del controlador que manejan las publicaciones. Que estaba recibiendo el mismo problema en una acción de controlador que maneja un encuentro cuando paso explícitamente un modelo a una vista:

[HttpGet] 
ActionResult SearchForSomething(SearchForm searchForm) 
{ 
    searchForm.MyId = SomeValueFromSession; 
    return View("SearchForSomething", searchForm); 
} 

En la vista, esta línea que rindió un campo oculto para MyID siempre se traduce "0":

@Html.HiddenFor(m => m.MyId); 

por sugerencia de Darren Oster me cambiaron a la siguiente y solucionado el problema:

[HttpGet] 
ActionResult SearchForSomething(SearchForm searchForm) 
{ 
    searchForm.MyId = SomeValueFromSession; 
    ModelState.Clear(); 
    return View("SearchForSomething", searchForm); 
} 
0

Mi comentario es relegado al último lugar (aunque no pude encontrar), por lo que:

En caso de que no desea borrar la ModelState, como se sugiere Darren Oster, la eliminación de la clave problemática trabajó para mí: ModelState.Remove("HiddenKey")

0

me encontré con este problema, así como con @ Html.HiddenFor.

@ Html.Hidden ("Id", Model.Id) también dio el valor 0, pero un campo de clave externa, por ejemplo, @ Html.Hidden ("Model_Category_ModelId", Model.Category.ModelId) funcionó, mientras que @ Html.HiddenFor (m => m.Category.ModelId) no.

Mi solución fue redirigir a la acción get, como se describe en ASP NET MVC Post Redirect Get Pattern.

Cuestiones relacionadas