Asp.net mvc 布尔值,html帮助程序隐藏且隐藏

Asp.net mvc 布尔值,html帮助程序隐藏且隐藏,asp.net-mvc,html-helper,html.hiddenfor,Asp.net Mvc,Html Helper,Html.hiddenfor,这是怎么回事?viewmodel变量是一个值为true的bool <%= Html.HiddenFor(m => m.TheBool) %> <%= Html.Hidden("IsTimeExpanded",Model.TheBool) %> <input type="hidden" value="<%=Model.TheBool%>" name="TheBool" id="TheBool"> m.TheBool)%%> 结果: <

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

<%= Html.HiddenFor(m => m.TheBool) %>
<%= Html.Hidden("IsTimeExpanded",Model.TheBool) %>
<input type="hidden" value="<%=Model.TheBool%>" name="TheBool" id="TheBool">
m.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">

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

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

2) 不要使用此帮助程序,请使用

<input type="hidden" name="the-name" 
  value="<%= Html.AttributeEncode(Model.TheBool) %>" id="TheBool_1216786" />

以下是razor中的一个示例:

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

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

model:
public class MyModel()
{
  public bool TheBool{ get; set; }
}
问题的答案是,默认情况下,HTML帮助程序使用发布的值(如果可用),然后引用模型。就我个人而言,我认为这没有什么意义,现在我想知道在我们的平台上还有多少其他的bug在等待

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

ModelState.Remove("TheBool")

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

我也有过类似的经历,最终还是这样度过了难关。 情况是,用户需要保存,然后确认保存场景

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

ModelSate.Remove("OperationConfirmed");
(这确实有效)因为我觉得它更直观

@{
  string btnSaveCaption = "Save Changes";
  if (Model.OperationConfirmed)
  {
    btnSaveCaption = "Confirm Save Changes";
    @Html.Hidden("OperationConfirmed", true)
  }          
} 

例如,id仅由助手自动设置,与结果无关。问题是:为什么帮手不能按预期工作?这是一个应该向MS提出的问题,许多人都有如此奇怪的行为(我发现在不到一个人的时候,其他人也有同样的问题)。我试图帮助解决或避免它。我不在微软工作:)我没有得到你的任何感谢,所以我不明白你为什么对我的帮助如此重要。我感谢你试图帮助我。只是你没有帮我。事实上,你没有提供问题中没有的相关信息。请告诉我您提到的问题。这似乎是您的情况:您仍然可以使用helper并使用
htmlAttributes
parameter-
Html.Hidden(“IsTimeExpanded”,Model.TheBool,new{ID=“TheBool_1216786”})传递ID
此注释中的答案应为正确答案-帮助者首先使用POST值。因此,如果您在回发时更新bool,然后在不执行重定向/获取的情况下显示您的模型,那么您可能显示了错误的值。是的,这是可行的,但我知道,在以后的几年中,当我查看代码时,我会想,“为什么我要这样做呢?”我完全同意,我会全心全意地推荐关于所谓“修复”的自由评论。然而,这是框架的不足,没有这样的障碍是无法避免的;也就是说,为了实现自动化而重写OnActionExecute(或某些类似设备)只会导致进一步的意外行为和问题