【问题标题】:data-val attributes not generated in partialview created with Html.ActionLink in ASPNET MVC3在 ASP NET MVC3 中使用 Html.ActionLink 创建的部分视图中未生成 data-val 属性
【发布时间】:2011-12-20 09:23:00
【问题描述】:

我有这个结构

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 属性没有为输入呈现,但是如果我将最后一个部分 (_MyEdit) 放在 Ajax.ActionLink (1) 它确实呈现它们的位置。

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

更新

我发现了一些非常有趣的东西,如果我去(在 Chrome 或带有 Firebug 的 Firefox 中)并点击查看源我看不到 data-val 属性,但如果我点击检查元素我看到它们..奇怪...

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2011-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-29
      • 2011-10-20
      • 1970-01-01
      • 1970-01-01
      • 2016-11-20
      相关资源
      最近更新 更多