代码之家  ›  专栏  ›  技术社区  ›  Martin

隐藏和隐藏HTML帮助程序的布尔值

  •  15
  • Martin  · 技术社区  · 15 年前

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

    我做错什么了?为什么帮手不按计划工作呢?

    4 回复  |  直到 9 年前
        1
  •  13
  •   garik    15 年前

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

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

    <input type="hidden" name="the-name" 
      value="<%= Html.AttributeEncode(Model.TheBool) %>" id="TheBool_1216786" />
    
        2
  •  1
  •   Community Mohan Dere    8 年前

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

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

    ModelState.Remove("TheBool")
    

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

        3
  •  0
  •   live-love    11 年前

    以下是Razor中的一个示例:

    html:
    @Html.HiddenFor(x => Model.TheBool, new { @id = "hdnBool" })
    
    javascript:
    alert($('#hdnBool').val());
    
    model:
    public class MyModel()
    {
      public bool TheBool{ get; set; }
    }
    
        4
  •  0
  •   AntDC    9 年前

    我也有过类似的经历,但最终还是这样度过了难关。 情况是用户希望保存,然后确认保存方案….

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

    ModelSate.Remove("OperationConfirmed");
    

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

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