1
此验证应该可以正常工作,但是如果下拉列表中没有选定的值,该帖子就会触发它。当移动到另一个非部分验证工作就好了。为简洁起见进行编辑。为什么验证会在部分视图中断裂?
视图模型:
public class BuilderVM
{
[Display(Name = "Select A Task")]
[Required]
public int? TaskId { get; set; }
public GenericSelectList Tasks { get; set; }
}
父视图(部分观点是在后门柱这个页面的底部呈现为您可能已经注意到,阿贾克斯选项规定,部分观点将在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>
尽管dropdownlistfor绑定到model.TaskId,当单击后按钮(input type="submit"
)时,它被注释为[Required]
,并且在下拉列表中没有选择任何值,但该帖子会经过而不是停止并追加验证消息。我不知道该如何解决这个问题,因为当复制粘贴到常规视图时,它工作得很好。为什么不通过局部视图验证工作?
您在视图中包含哪些JavaScript文件?我假设你有jQuery,jQuery验证器,jQuery不显眼的验证器和其他(如AJAX等) – 2012-04-09 22:01:01
事实上,你的第一个答案是正确的。但是,您有一个错误,导致它无法正常工作。一旦我发现错字,它工作得很好。你有'.validator.unobtrusive.parse('#Content');',但它应该是'('.Content')',因为内容是一个类而不是一个id。 – 2012-04-09 22:01:21
啊好的完美!我看起来并不那么亲密,并且假设你在那里有一个ID。做得好! – 2012-04-09 22:03:43