Клиент проверяет флажок без привязки к модели при использовании MVC 2 jQuery Validation - PullRequest
0 голосов
/ 15 января 2011

Имеют: Использование ASP.NET MVC 2, проверка сервера на основе DataAnnotationsModel и проверка клиента с помощью jQuery.Все в моей модели отлично проверено на клиенте с помощью проверки на основе jQuery (jQuery.validate и MicrosoftMvcJQueryValidation.js).

Необходимость: Добавление дополнительного HTML <input type="checkbox" id="terms" /> в мою форму.Мне нужна проверка jQuery, чтобы установить этот флажок и каким-то образом подключить его к любому клиентскому сценарию jQuery, который MVC контролирует автоматически.Да, я знаю, что он не будет проверяться на стороне сервера, но мне это не нужно или не нужно.

Похоже, что должно быть простым, но я новичок в MVCЯ новичок в jQuery, и мои поиски заканчиваются пустыми.

Любая помощь будет признательна!

Ответы [ 3 ]

1 голос
/ 15 января 2011

Вот решение. Это имитирует то, что mvc делает, чтобы подключиться к проверке jQuery. Поэтому есть флажок «Принять», который не относится к модели. Сценарий должен идти после формы и добавляет все метаданные проверки для этого поля.

    <%
        Html.EnableClientValidation(); %>
    <% using(Html.BeginForm("Show"))
{ %>
      <%= Html.EditorForModel() %>
      <div class="editor-field">
        <%= Html.CheckBox("Accept", new { @class = "required" })%> 
        <span class="field-validation-valid" id="Accept_validationMessage"></span>
      </div>
      <input type="submit" value="Submit" />
<%} %>
<script type="text/javascript">
    window.mvcClientValidationMetadata[0].Fields.push({
        FieldName: "Accept",
        ReplaceValidationMessageContents: true,
        ValidationMessageId: "Accept_validationMessage",
        ValidationRules: [{ ErrorMessage: "The Accept field is required.", ValidationType: "required", ValidationParameters: {}}]
    });
</script>
0 голосов
/ 15 января 2011

Попробуйте это

$(document).ready(function() {
    //// Assuming your form's ID is 'form0'
    $("#form0").submit(function() {  
        if ($("#terms").attr('checked')) {
            return true;
        }
        else
        {
           //// Error message if any
           return false;
        }
    });
});
0 голосов
/ 15 января 2011

Могу ли я предложить использовать ViewModel для каждого просмотра (поместите все ваши аннотации данных там). Затем вы можете создать свойство булевой модели для вашего флажка и установить для него значение обязательное.

Оттуда, если вы отправляете модель обратно в контроллер, вы можете просто использовать AutoMapper , чтобы сопоставить ViewModel с необходимой моделью, или просто сопоставить свойства самостоятельно.

В любом случае, рекомендуется использовать ViewModel для каждого представления. Помните, что работа ViewModel состоит в том, чтобы попытаться содержать все необходимое в представлении. Это определенно означает, что он может иметь и будет иметь другие данные, которые не требуются в модели.

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