问题:
我在页面上有一个@ 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">
感谢您阅读我的问题,如果您需要任何说明,我会尝试更新问题。