带有 html 助手 Hidden 和 HiddenFor 的布尔值

发布于 2024-08-24 01:41:30 字数 541 浏览 6 评论 0原文

这是怎么回事? 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">

我做错了什么?为什么助手没有按预期工作?

What's up with this? The viewmodel variable is a bool with value true.

<%= Html.HiddenFor(m => m.TheBool) %>
<%= Html.Hidden("IsTimeExpanded",Model.TheBool) %>
<input type="hidden" value="<%=Model.TheBool%>" name="TheBool" id="TheBool">

Results in:

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

What am I doing wrong? Why don't the helpers work as intended?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

你如我软肋 2024-08-31 01:41:30

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

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

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

1) use different (unique) ids

2) don't use this helper, use

<input type="hidden" name="the-name" 
  value="<%= Html.AttributeEncode(Model.TheBool) %>" id="TheBool_1216786" />
來不及說愛妳 2024-08-31 01:41:30

正如此处所回答的,问题是 HTML 帮助程序默认使用发布的值(如果有)然后参考模型。就我个人而言,我认为这没有多大意义,现在想知道我们的平台上还有多少其他错误等待着。

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

ModelState.Remove("TheBool")

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

As answered here the problem is that HTML helpers by default use the posted values (if available) then refer to the model. Personally I don't think this makes a whole bunch of sense and now wonder how many other bugs lie in wait throughout our platform.

Anyway, the solution posted in the aforementioned answer will solve the problem, just add this line before you return from the controller:

ModelState.Remove("TheBool")

And yes, it's a bit rubbish because you can only use a string reference... but it does work.

泪冰清 2024-08-31 01:41:30

我也有类似的情况,最后就这样解决了。
情况是用户想要保存然后确认保存场景......

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

ModelSate.Remove("OperationConfirmed");

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

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

I had similar and ended up getting round it like this.
The situation is the user wants a Save and then confirm save scenario....

I chose to use the solution below rather than

ModelSate.Remove("OperationConfirmed");

(which does work) as I feel it is more intuative....

@{
  string btnSaveCaption = "Save Changes";
  if (Model.OperationConfirmed)
  {
    btnSaveCaption = "Confirm Save Changes";
    @Html.Hidden("OperationConfirmed", true)
  }          
} 
羅雙樹 2024-08-31 01:41:30

这是剃刀中的示例:

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

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

model:
public class MyModel()
{
  public bool TheBool{ get; set; }
}

Here's an example in razor:

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

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

model:
public class MyModel()
{
  public bool TheBool{ get; set; }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文