MVC3 ajax验证 - 显示部分视图首次显示时出现的错误消息

时间:2012-05-20 03:25:42

标签: jquery asp.net-mvc-3 validation telerik-mvc

我发出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'属性排除部分类,则错误消息消失但我没有得到客户端验证(因此我可以在非可空字段中输入空白)

有人对此有解决方案吗?

1 个答案:

答案 0 :(得分:0)

对于想知道上述原因发生的人,这是因为AJAX调用通过我的控制器中的HTTP post路由接受了包含一些[Required]字段装饰的完整结构

决议是在控制器中调用另一种方法,该方法只接受那些传递的变量,因此没有通过验证,一切都很好