为什么验证在部分视图上中断
本文关键字:视图 中断 验证 为什么 | 更新日期: 2023-09-27 18:30:45
此验证应该有效,但如果下拉列表中没有选定的值,则帖子会立即触发。当移动到另一个非部分时,验证工作正常。为简洁起见进行了编辑。
视图模型:
public class BuilderVM
{
[Display(Name = "Select A Task")]
[Required]
public int? TaskId { get; set; }
public GenericSelectList Tasks { get; set; }
}
父视图(部分视图在帖子发布后呈现在本页底部。 您可能已经注意到,ajax 选项指示分部视图将在div id="MoveOn"
中呈现):
@{
ViewBag.Title = "Builder";
AjaxOptions ajaxOpts = new AjaxOptions
{
LoadingElementDuration = 2,
LoadingElementId = "removeChoice",
UpdateTargetId = "MoveOn"
};
}
<div id="removeChoice">
@using (Ajax.BeginForm("Selected", ajaxOpts))
{
<fieldset>
<div>
//Data For Submission (This data validates perfectly before post)
</div>
<p><input type="submit" value="Go" /></p>
</fieldset>
}
</div>
<div id="MoveOn"></div>
部分视图(在父视图的帖子之后呈现):
@model namespace.BuilderVM
@{
AjaxOptions ajaxOpts = new AjaxOptions
{
UpdateTargetId = "Entry",
LoadingElementDuration = 2,
LoadingElementId = "RemoveEntry"
};
}
<div id="RemoveEntry">
<h2>Details</h2>
@using (Ajax.BeginForm("Data", ajaxOpts))
{
@Html.ValidationSummary(true)
<fieldset>
<legend>Data</legend>
<div>
<span class="label">@Html.LabelFor(model => model.TaskId)</span>
<span class="content">
@Html.DropDownListFor(
model => model.TaskId,
new SelectList(
Model.Tasks.Values,
"Id",
"DisplayFields",
Model.Tasks.StartValue
),
Model.Tasks.Message
)
</span>@Html.ValidationMessageFor(model => model.TaskId)
</div>
<p><input type="submit" value="Add Work Completed Data" /></p>
</fieldset>
}
</div>
<div id="Entry"></div>
尽管下拉列表绑定到模型。TaskId,当单击发布按钮(input type="submit"
)时,它用[Required]
注释,并且在帖子经过的下拉列表中没有选择任何值,而不是停止并附加验证消息。我不确定该怎么做才能解决这个问题,因为复制粘贴到常规视图时它可以正常工作。为什么部分视图验证不起作用?
问题是验证器只是在开始时加载(使用 $(document).ready())。您可以执行以下操作(在分部视图中插入):
<script>
$(function() {
$.validator.unobtrusive.parse('.Content');
});
</script>
根据给定的信息,我认为这是您的问题。希望这对你有帮助。