17

这是怎么回事?viewmodel 变量是一个值为 true 的布尔值。

<%= 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">

我究竟做错了什么?为什么助手不能按预期工作?

4

4 回答 4

15

1)使用不同的(唯一的)ID

2)不要使用这个助手,使用

<input type="hidden" name="the-name" 
  value="<%= Html.AttributeEncode(Model.TheBool) %>" id="TheBool_1216786" />
于 2010-03-08T09:51:26.683 回答
3

正如这里所回答的,问题是 HTML 助手默认使用发布的值(如果可用)然后引用模型。就我个人而言,我认为这并没有什么意义,现在想知道在我们的平台上还有多少其他错误在等待。

无论如何,上述答案中发布的解决方案将解决问题,只需在从控制器返回之前添加此行:

ModelState.Remove("TheBool")

是的,这有点垃圾,因为您只能使用字符串引用......但它确实有效。

于 2016-03-10T00:06:44.360 回答
0

这是剃刀中的一个例子:

html:
@Html.HiddenFor(x => Model.TheBool, new { @id = "hdnBool" })

javascript:
alert($('#hdnBool').val());

model:
public class MyModel()
{
  public bool TheBool{ get; set; }
}
于 2014-08-01T20:30:22.403 回答
0

我有类似的情况,最终像这样绕过它。情况是用户想要一个保存然后确认保存方案....

我选择使用下面的解决方案而不是

ModelSate.Remove("OperationConfirmed");

(确实有效)因为我觉得它更直观......

@{
  string btnSaveCaption = "Save Changes";
  if (Model.OperationConfirmed)
  {
    btnSaveCaption = "Confirm Save Changes";
    @Html.Hidden("OperationConfirmed", true)
  }          
} 
于 2016-06-30T13:37:11.773 回答