Как проверить, установлены ли все флажки в шаблоне редактора

#asp.net #asp.net-mvc #asp.net-mvc-3

#asp.net #asp.net-mvc #asp.net-mvc-3

Вопрос:

У меня есть форма, использующая шаблон редактора, показывающий серию флажков, относящихся к дочернему списку внутри модели формы. При отправке формы мне нужно проверить, установлены ли все флажки для всех дочерних элементов, и если нет, отобразить модальное диалоговое окно, чтобы убедиться, что пользователь намеренно решил оставить некоторые флажки непроверенными. Я знаю, что могу использовать диалоговое окно jQuery для отображения модального диалога, но я понятия не имею, как проверить, установлены ли все флажки в шаблонах редактора. Мой код похож на следующий:

 <%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<Test.Models.ModelList>" %>

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
  ShowPropReturn
</asp:Content>

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">

<h2>ShowPropReturn</h2>

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

<% using (Html.BeginForm()) { %>
  <%: Html.ValidationSummary(true) %>
  <fieldset>
    <legend>ModelList</legend>

    <div class="editor-label">
        <%: Html.LabelFor(model => model.MyProperty1) %>
    </div>
    <div class="editor-field">
        <%: Html.EditorFor(model => model.MyProperty1) %>
        <%: Html.ValidationMessageFor(model => model.MyProperty1) %>
    </div>

    <div class="editor-label">
        <%: Html.LabelFor(model => model.MyProperty2) %>
    </div>
    <div class="editor-field">
        <%: Html.EditorFor(model => model.MyProperty2) %>
        <%: Html.ValidationMessageFor(model => model.MyProperty2) %>
    </div>

    <table>
        <%: Html.EditorFor(model => model.MyProperty3) %>
    </table>
    <p>
        <input type="submit" value="Save" />
    </p>
  </fieldset>
<% } %>

<div>
  <%: Html.ActionLink("Back to List", "Index") %>
</div>

</asp:Content>
  

и для шаблона редактора:

 <%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<Test.Models.ColumnList>" %>

<tr>
  <td>
    <%= Html.CheckBoxFor(x => x.value) %>
  </td>
</tr>
  

Любая помощь была бы действительно оценена, спасибо.

Ответ №1:

Добавьте класс CSS в свой шаблон редактора для флажков, которые вы хотите проверить

 <%= Html.CheckBoxFor(x => x.value, new { @class = "chk" }) %>
  

И затем вы можете использовать селекторы jQuery : checked и :checkbox для выполнения сравнения size().

 if ($('input.chk:checkbox').size() == $('input.chk:checked')) {

}
  

Ответ №2:

добавьте класс в свои флажки, например

 <%= Html.CheckBoxFor(x => x.value,new{@class="chk"}) %>
  

а затем подключитесь с помощью jquery к событию отправки

 $("#form").live('submit', function(e){
      $(".chk").each(function(){
           if($(this).attr("checked") == false)
           {
              //show modal dialogue here   
           }
       });
});