Проверка клиента MVC на InputModel, а не на ViewModel - PullRequest
0 голосов
/ 03 июня 2011

У меня есть вид с моделью представления.

Он имеет форму, которая отправляет обратно совершенно другую модель.

Я пытаюсь запустить проверку клиента.

У меня есть

<script type="text/javascript" src="@Url.Content("~/Scripts/jquery-1.4.4.min.js")"></script>
    <script type="text/javascript" src="@Url.Content("~/Scripts/jquery.validate.min.js")"></script>
    <script type="text/javascript" src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")"></script>

<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />

Мой взгляд выглядит так:

<form method="post" action="@Url.Action("Checkout")">
    @Html.ValidationSummary()
    <table>
        <tr>
            <td>Forename:</td>
            <td>@Html.TextBox("Forename")  @Html.ValidationMessage("Forename","*")</td>
        </tr>
</table>
</form>

У меня создается впечатление, что Client Validation создает атрибуты HTML5 на основе ViewModel на входах, но у меня нет этой ViewModel, чтобы он мог создавать атрибуты данных, так как может работать проверка клиента?

1 Ответ

0 голосов
/ 03 июня 2011

Метод проверки клиента работает «из коробки», так как он использует ModelMetadata модели представления, передаваемой в представление, для передачи атрибутов HTML5 data-* в поля ввода на основе атрибутов аннотации данных, которые вы использовали в модели представления.Если вы используете совершенно другую модель представления в качестве аргумента действия в действии POST, это, очевидно, не сработает, так как проверка на стороне сервера будет зависеть от модели представления в действии POST, тогда как проверка клиента будет зависеть от модели представления, передаваемой в представление представления.эта форма.

Единственное решение, которое я вижу в этой проблеме, - это забыть об автоматической проверке клиента и определить правила jquery.validate вручную, чтобы они соответствовали модели представления, которую вы используете в действии POST насервер.Таким образом, вы можете забыть об атрибутах data-*, исключить скрипт jquery.validate.unobtrusive.min.js со своей страницы и войти в код :

$(function() {
    $('form').vaildate({
        rules: {
            ...
        },
        messages: {
            ...
        }
    });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...