我发出ajaxRequest后,出现在目标表单上的'必填字段'验证邮件时遇到问题。
我正在从表单中执行ajaxRequest命令,以允许部分视图以不同的形式呈现(两个表单位于同一页面上,实际上是Telerik拆分器的窗格)。
// note "MyAjaxCall is passed (below) so that I can populate
// the partial view with the model data
splitter.ajaxRequest(".t-pane:last", "/HierarchyMember/Edit/" + hierarchyId, {requestType: "MyAjaxCall" });
我的控制器只需获取相应的模型数据并返回部分视图
return PartialView(hierarchyMemberRepository.Find(hierarchyMember.Id);
然后在我的局部视图(命名为“编辑”)中,我通过Ajax.BeginForm呈现(也请注意,在Ready上因为表单是动态加载的,我正在重新加载不显眼的验证)
@using (Ajax.BeginForm("Edit"
, "HierarchyMember"
, new AjaxOptions { OnBegin = "ajaxOnBegin", OnFailure = "ajaxOnFailure()"
, HttpMethod = "Post", InsertionMode = InsertionMode.Replace
, OnSuccess = "ajaxOnSuccess(data, $('#submitButtonClicked')[0].value)"
, OnComplete = "ajaxOnComplete" }
, new { id = "editForm", name = "editForm" }))
{
@Html.ValidationSummary(false)
...
}
<script...>
$(document).ready(function () {
var form = $("#editForm");
// for validation
form.removeData("validator").removeData("unobtrusiveValidation");
$.validator.unobtrusive.parse(form);
});
</script>
因此我在我的布局中包括jquery.validate.min.js,jquery.unobtrusive-ajax.min.js,jquery.validate.unobtrusive.min.js - 在ScriptRegistrar中,我尝试了jQuery和jQueryValidation设置如真假
<script src="@Url.Content("~/Scripts/2012.1.419/jquery-1.7.1.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery-ui.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/MicrosoftAjax.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/MicrosoftMvcAjax.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/MicrosoftMvcValidation.js")" type="text/javascript"></script>
...
@(Html.Telerik().ScriptRegistrar().jQuery(false).jQueryValidation(false).DefaultGroup(group => group.Combined(true).Compress(true)))
要强制执行必填字段,我有一个扩展EntityFramework生成的模型类的部分类,如下所示
[Required()]
public object HierarchyId;
[Required()]
public object HierarchyDescription;
请注意,SQL Server中的上述两个字段都定义为NOT NULL(在Entity Framework(4.1)中,属性属性中的IsNullable标志为false。
我遇到的问题是,当部分视图首次出现时,表单上的所有必填字段都会显示“... required field”错误消息(无论字段是否包含值)。如果我使用上面的'Required'属性排除部分类,则错误消息消失但我没有得到客户端验证(因此我可以在非可空字段中输入空白)
有人对此有解决方案吗?
答案 0 :(得分:0)
对于想知道上述原因发生的人,这是因为AJAX调用通过我的控制器中的HTTP post路由接受了包含一些[Required]字段装饰的完整结构
决议是在控制器中调用另一种方法,该方法只接受那些传递的变量,因此没有通过验证,一切都很好