атрибуты data-val не генерируются при частичном просмотре, созданном с помощью Html.ActionLink в ASPNET MVC3 - PullRequest
2 голосов
/ 02 ноября 2011

У меня есть эта структура

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 частичное имеет что-то вроде:

    @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) он их отображает.

Это ошибка? Любое решение? Заранее спасибо! Гильермо

UPDATE

Я нашел что-то действительно интересное, если я пойду (в Chrome или Firefox с Firebug) и нажму View View, я не вижу атрибутов data-val, но если я нажимаю Inspect Element, я вижу их ... странно ...

1 Ответ

2 голосов
/ 07 февраля 2012

Если вы хотите, чтобы теги проверки данных были там, вы должны быть в FormContext. Следовательно, если вы динамически генерируете части своей формы, вам нужно включить следующую строку в ваше частичное представление:

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

Затем вам нужно убедиться, что вы динамически перепривязываете свою ненавязчивую проверку каждый раз, когда добавляете / удаляете элементы:

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