当value属性正确设置为bool时,为什么Razor HTML HiddenFor会触发bool值的验证?

时间:2015-06-03 15:06:16

标签: c# asp.net-mvc asp.net-mvc-4 razor

问题:

我在页面上有一个@ Html.HiddenFor(model => model.myBool),它会生成:

<input data-val="true" data-val-required="The myBool field is required." id="myBool" name="myBool" type="hidden" value="True">

但是,验证摘要坚持在我尝试提交未设置隐藏字段的页面时显示data-val-required错误消息。

情况:

诚然,我的情况可能不是最佳做法,而且我已经找到了解决方法。但是,为了更好地理解MVC / Razor,我想得到这个问题的答案。

我有一个局部视图里面的视图,视图有一个viewmodel mainVM(瘦身)看起来像这样:

class mainVM {
    public mainVM(...) {
        navVM = new navigationVM(...);
    }
    ...
    navigationVM navVM { get; set; }
    ...
}

部分视图有一个viewmodel,它包含一些bool来控制哪些选项卡可用于导航主窗体。当我提交时,我想保留其中一个bool。这是局部视图viewmodel:

class navigationVM {
    public navigationVM (...) {
        myBool = ...;
    }
    ...
    public bool myBool { get; set; }
    ...
}

主要观点:

@Html.Partial("_navigation", Model.navigationVM)
...
@Html.ValidationSummary(false, "Required Corrections:", new { @class = "text-danger" })

部分观点:

@Html.HiddenFor(model => model.myBool)

概要/问题:

为什么此设置会在我提交主视图时触发所需的字段验证?

解决方法:

我发现的解决方法是从主视图而不是局部视图内部引用bool。所以我删除了我的@ Html.HiddenFor(model =&gt; model.myBool)并将其替换为主视图中的以下内容:

@Html.HiddenFor(model => model.navigationVM.myBool)

这不会触发验证错误/模型状态错误。作为参考,这创建了以下HTML:

<input data-val="true" data-val-required="The myBool field is required." id="navigationVM_myBool" name="navigationVM.myBool" type="hidden" value="True">

感谢您阅读我的问题,如果您需要任何说明,我会尝试更新问题。

0 个答案:

没有答案