0

我在发出 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 设置为 true 并且错误的

<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。

我遇到的问题是,当部分视图首次出现时,表单上的所有必填字段都会显示“...必填字段”错误消息(无论该字段是否包含值)。如果我排除具有上述“必需”属性的部分类,错误消息会消失,但我没有得到客户端验证(因此我可以在不可为空的字段中输入空白)

有人对此有解决方案吗?

4

1 回答 1

0

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

解决方案是在控制器中调用一个不同的方法,该方法只接受那些正在传递的变量,因此没有失败验证,一切都很好

于 2012-05-30T08:37:37.447 回答