我正试着做这件简单的事情
<%= Html.HiddenFor(model => model.Id)%>
该模型是
[HiddenInput(DisplayValue=true)]
public int Id { get; set; }
但我总是把这个渲染出来
<input type="hidden" value="0" name="UserInfo.Id" id="UserInfo_Id">
我检查过了,id不是0..?!
这里需要一些解释。
编辑
问题似乎是下面提到的post问题。这是有效的
<input type="hidden" value="<%= Html.AttributeEncode(Model.Id) %>" id="<%= Html.IdFor(model=>model.Id)%>" name="<%= Html.NameFor(model=>model.Id)%>" />
感谢Manaf
发布于 2014-02-07 23:05:04
补充Manaf的正确答案--您正确地注意到问题发生在处理posts的控制器操作中。当我显式地将模型传递给视图时,我在处理get的控制器操作中也遇到了同样的问题:
[HttpGet]
ActionResult SearchForSomething(SearchForm searchForm)
{
searchForm.MyId = SomeValueFromSession;
return View("SearchForSomething", searchForm);
}
在视图中,为MyId呈现隐藏输入的这一行始终呈现为"0":
@Html.HiddenFor(m => m.MyId);
根据Darren Oster的建议,我更改了以下内容并解决了问题:
[HttpGet]
ActionResult SearchForSomething(SearchForm searchForm)
{
searchForm.MyId = SomeValueFromSession;
ModelState.Clear();
return View("SearchForSomething", searchForm);
}
发布于 2015-07-17 03:50:20
我的评论被放在最后一个位置(甚至我都找不到它),所以:
如果您不想像Darren Oster建议的那样清除模型状态,那么删除有问题的键对我来说很有效:ModelState.Remove("HiddenKey")
发布于 2015-08-13 17:55:33
我在使用@Html.HiddenFor时也遇到了这个问题。
@Html.Hidden("Id",Model.Id)也给出了值0,但是外键字段,例如@Html.Hidden("Model_Category_ModelId",Model.Category.ModelId)起作用了,而它的@Html.HiddenFor(m => m.Category.ModelId)不起作用。
我的解决方案是重定向到get操作,如ASP NET MVC Post Redirect Get Pattern中所述。
https://stackoverflow.com/questions/3606087
复制相似问题