ASP.Net MVC 3 Ненавязчивая проверка не работает в режиме частичного просмотра - PullRequest
8 голосов
/ 14 марта 2011

Я настроил частичное представление, которое содержит собственный тег формы, например:

<tr>
    @using (Html.BeginForm("Create"))
 {
        <td>
            @Html.TextBoxFor(model => model.Date)
            @Html.ValidationMessageFor(model => model.Date)
        </td>
        <td>
            @Html.TextBoxFor(model => model.Amount)
            @Html.ValidationMessageFor(model => model.Amount)
        </td>
        <td>
            @Html.TextBoxFor(model => model.Tags)
            @Html.ValidationMessageFor(model => model.Tags)
        </td>
        <td>
            @Html.EnumDropDownListFor(model => model.Type)
        </td>
        <td>
            <input type="submit" value="Add" />
            @Html.ValidationSummary(true)
        </td>
 }
</tr>

Я отображаю его на странице, используя @ Html.Action ("Create") (Это частьтаблица, следовательно, теги

.

По какой-то странной причине моя проверка на стороне клиента не работает, и я впервые вижу ошибки при публикации.

Есть ли что-то особенное в частичных представлениях ипроверка на стороне клиента?

Я включил следующие сценарии:

<script src="/Scripts/jquery.1.5.1.min.js" type="text/javascript"></script>
<script src="/Scripts/jquery.validate.min.js" type="text/javascript"></script>
<script src="/Scripts/jquery.validate.unobtrusive.min.js" type="text/javascript"></script>

РЕДАКТИРОВАТЬ

Я только что попытался добавить этот сценарий на страницу:

jQuery('form').submit(function ()
{
    alert(jQuery(this).valid());
});

Он предупреждает «true», поэтому клиентский сценарий проверки определенно присутствует, и по какой-то причине он не проверяет соответствующие поля: - /

EDIT 2

Я загрузил весь исходный код страницы (HTML + JS) в pastebin: http://pastebin.com/GvqLW495

Ответы [ 3 ]

11 голосов
/ 14 марта 2011

Редактировать

Я только что понял, глядя на ваш код, что вы используете jQuery 1.5.1 с (я предполагаю) .NET предоставленным jQuery.validate. К сожалению, эти двое пока не работают вместе. Вам придется перейти на здесь, чтобы получить версию , которая работает с последней версией jQuery (вам нужно использовать 1.4.4). Если это не сработает, я все равно рекомендую проверить решение ниже.


У меня была похожая проблема (хотя я не уверен, что это точно такая же проблема). Я написал о решении в этом посте . К сожалению, я не могу быть уверен, что у вас точно такая же проблема, но она того стоит.

По сути, это сводилось к тому, что мне пришлось вызывать эту строку после загрузки моих PartialViews (хотя я загружал их через AJAX, что, как я думаю, вызвало проблему):

$.validator.unobtrusive.parse($("#validation"));

См. Сообщение в блоге для более подробной информации. Надеюсь, это поможет вам.

1 голос
/ 17 марта 2011

Я наконец-то выяснил, что приводит к сбою, это тот факт, что мое частичное представление находится внутри html-таблицы ...

<table>
    <tr>
        <th>
            Date
        </th>
        <th>
            Amount
        </th>
        <th>
            Tags
        </th>
        <th>
            Type
        </th>
        <th>
        </th>
    </tr>
    @Html.Action("Create")
</table>

Это не сработает, однако, если я переместу @Html.Действие вне табличного тега, оно работает просто отлично.

0 голосов
/ 11 марта 2014

Я думаю, что корень вашей проблемы в использовании неправильного синтаксиса html: Тег <tr> может содержать только теги <td>.
В большинстве случаев структура, подобная вашей, не будет корректно отображаться в браузерах, особенно при асинхронной загрузке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...