这是怎么回事? viewmodel变量是一个值为true的bool。
<%= Html.HiddenFor(m => m.TheBool) %>
<%= Html.Hidden("IsTimeExpanded",Model.TheBool) %>
<input type="hidden" value="<%=Model.TheBool%>" name="TheBool" id="TheBool">
结果:
<input id="TheBool" name="TheBool" value="False" type="hidden">
<input id="TheBool" name="TheBool" value="False" type="hidden">
<input value="True" name="TheBool" id="TheBool" type="hidden">
我做错了什么?为什么助手不按预期工作?
答案 0 :(得分:14)
1)使用不同的(唯一的)ID
2)不要使用此助手,请使用
<input type="hidden" name="the-name"
value="<%= Html.AttributeEncode(Model.TheBool) %>" id="TheBool_1216786" />
答案 1 :(得分:1)
回答here问题是HTML帮助程序默认使用已发布的值(如果可用),然后引用模型。就我个人而言,我并不认为这会产生一大堆意义,现在想知道在整个平台上有多少其他错误在等待。
无论如何,上述答案中公布的解决方案将解决问题,只需在从控制器返回之前添加此行:
ModelState.Remove("TheBool")
是的,它有点垃圾,因为你只能使用字符串引用......但它确实有效。
答案 2 :(得分:0)
这是剃刀中的一个例子:
html:
@Html.HiddenFor(x => Model.TheBool, new { @id = "hdnBool" })
javascript:
alert($('#hdnBool').val());
model:
public class MyModel()
{
public bool TheBool{ get; set; }
}
答案 3 :(得分:0)
我有类似的东西,最终像这样绕过它。 情况是用户想要保存然后确认保存方案....
我选择使用下面的解决方案而不是
ModelSate.Remove("OperationConfirmed");
(这确实有效),因为我觉得它更直观......
@{
string btnSaveCaption = "Save Changes";
if (Model.OperationConfirmed)
{
btnSaveCaption = "Confirm Save Changes";
@Html.Hidden("OperationConfirmed", true)
}
}