在ASP NET MVC3中使用Html.ActionLink创建的局部视图中未生成data-val属性

时间:2011-11-02 14:33:35

标签: asp.net-mvc unobtrusive-javascript unobtrusive-validation

我有这个结构

View

    Html.RenderPartial (1)

    Html.RenderPartial (2)

然后在每个部分视图中我都有

 @Ajax.ActionLink("Edit", "EditMethod", null, new AjaxOptions
               {
                   HttpMethod = "POST",
                   InsertionMode = InsertionMode.Replace,
                   UpdateTargetId = "divEditContent"
               }, new { @class = "my-edit" })

点击它时会渲染另一个部分,将div“divEditContent”改为:

public PartialViewResult EditContactInformation()
{
    return PartialView("_MyEdit", GetDetails());
}

_MyEdit partial有类似的东西:

    @using (Ajax.BeginForm("SaveContactInformation", "MyBsol", new AjaxOptions
    {
        HttpMethod = "POST",
        InsertionMode = InsertionMode.Replace,
        UpdateTargetId = "divContactInformationContent"
    }))
    {
     <script type="text/javascript">
            $(function () {
                $('form#ajaxForm').find('a.submit-link').click(function () {
                    $('form#ajaxForm').submit();
                });
            })
        </script>
    <a href="#" class="submit-link">Save</a>
    @Ajax.ActionLink("Cancel", "CancelEdit", null, new AjaxOptions
                           HttpMethod = "POST",
                           InsertionMode = InsertionMode.Replace,
                           UpdateTargetId = "divContent"
                       }, new { @class = "my-cancel" })
     @Html.TextBoxFor(model => model.Title, new { @class = "txt-input", placeholder = "Eg. Mr, Mrs, Ms" })
    @Html.ValidationMessageFor(model => model.Title)
    }

问题是data-val atttributes不会为输入呈现,但是如果我将最后一个部分(_MyEdit)放在Ajax.ActionLink(1)所呈现的位置。

这是一个错误吗?任何解决方法? 提前致谢!吉列尔莫

更新

我发现了一些非常有趣的东西,如果我去(在Chrome或Firefox中使用Firebug)并点击View Source我看不到data-val属性,但是如果我点击Inspect Element我就会看到它们。 ...

1 个答案:

答案 0 :(得分:2)

如果您希望数据验证标记存在,则需要位于FormContext。因此,如果您动态生成表单的一部分,则需要在局部视图中包含以下行:

@{ if(ViewContext.FormContext == null) {ViewContext.FormContext = new FormContext(); }

然后,您需要确保每次添加/删除项目时动态重新绑定不引人注意的验证:

$("#form").removeData("validator");
$("#form").removeData("unobtrusiveValidation");
$.validator.unobtrusive.parse("#form");