我想做这个简单的事情
<%= Html.HiddenFor(model => model.Id)%>
Run Code Online (Sandbox Code Playgroud)
这个模型是
[HiddenInput(DisplayValue=true)]
public int Id { get; set; }
Run Code Online (Sandbox Code Playgroud)
但我总是得到这个渲染
<input type="hidden" value="0" name="UserInfo.Id" id="UserInfo_Id">
Run Code Online (Sandbox Code Playgroud)
我检查并且ID不是0 ..?!
这里需要一些解释......
编辑
问题似乎是下面提到的帖子.这很有效
<input type="hidden" value="<%= Html.AttributeEncode(Model.Id) %>" id="<%= Html.IdFor(model=>model.Id)%>" name="<%= Html.NameFor(model=>model.Id)%>" />
Run Code Online (Sandbox Code Playgroud)
感谢Manaf
Man*_*ous 24
我不确定你是否就是这种情况,但是Html.HiddenFor()
"如果在帖子期间更改了值,则不会在帖子后输出正确的值".这不是一个以这种方式设计的错误.
快速解决 :
不要使用帮助程序,请尝试以下方法:
<input type="hidden" value="<%= Html.AttributeEncode(model.Id) %>" id="Id" name="Id" />
Run Code Online (Sandbox Code Playgroud)
总是为我工作:)
要添加到Manaf的正确答案 - 您正确地注意到问题发生在处理帖子的控制器操作中.当我明确地将模型传递给视图时,我在控制器操作中遇到同样的问题处理get:
[HttpGet]
ActionResult SearchForSomething(SearchForm searchForm)
{
searchForm.MyId = SomeValueFromSession;
return View("SearchForSomething", searchForm);
}
Run Code Online (Sandbox Code Playgroud)
在视图中,为MyId呈现隐藏输入的这一行始终呈现为"0":
@Html.HiddenFor(m => m.MyId);
Run Code Online (Sandbox Code Playgroud)
根据Darren Oster的建议,我改为以下内容并修复了问题:
[HttpGet]
ActionResult SearchForSomething(SearchForm searchForm)
{
searchForm.MyId = SomeValueFromSession;
ModelState.Clear();
return View("SearchForSomething", searchForm);
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
14736 次 |
最近记录: |