none
Обработка сгенерированного списка CheckBox'ов RRS feed

  • Вопрос

  •  

    ASP.NET with C#

    На форме есть таблица, которая заполняется данными в определенной функцией. Также в таблице имеется столбец, в который генерируется CheckBox. Количество строк неизвестно.

    Как мне узнать какие чекбоксы были отмечены?

    Пример из PHP.

    HTML

    <input type="checkbox" name="checkName[0]"> ...

    <input type="checkbox" name="checkName[1]" checked="checked"> ...

    <input type="checkbox" name="checkName[2]"> ...

    PHP после submit

    $checks = $_POST["checkName"];

    $checks - далее массив, в котором элемент с индексом 1 равен "on"

     

    Есть ли аналог в ASP.NET

    10 июня 2010 г. 13:46

Ответы

  • Вам лучше почитать матчасть, ибо аналог из PHP тут несколько неуместен

    тут 2 варианта могу предложить, либо Вы исспользуете привязку, и не ориентируетесь на CheckBox'ы, а на данные, где выставили галку - там значение - true

    это лучший вариант

    либо работать с DOM моделью Silverlight, VisualTreeHelper, вроде называется класс, покопайте в этом направлении

    Удачи

    • Помечено в качестве ответа I.Vorontsov 17 июня 2010 г. 9:09
    17 июня 2010 г. 5:05
  • Пример из ASP MVC
    HTML:
    <form action="/Core/InstallModules" method="post">
    
           <input id="Mytrip_Articles" name="Mytrip.Articles" type="checkbox" value="true" /><input name="Mytrip.Articles" type="hidden" value="false" />
           Mytrip.Articles</div>
          <div class="editor-field">
           <input id="Mytrip_Rssparser" name="Mytrip.Rssparser" type="checkbox" value="true" /><input name="Mytrip.Rssparser" type="hidden" value="false" />
           Mytrip.Rssparser</div>
          <div class="editor-field">
           <input id="Mytrip_Votes" name="Mytrip.Votes" type="checkbox" value="true" /><input name="Mytrip.Votes" type="hidden" value="false" />
           Mytrip.Votes</div>
          
          <p>
            <input type="submit" value="Сохранить"></input>
          </p> 
      </form>
    

    .aspx:

    <% using (Html.BeginForm()) {%>
     
    
          <%foreach (var x in Model.modules)
           { %><div class="editor-field">
           <%=Html.CheckBox(x.Key) %>
           <%=x.Key %></div>
          <%} %>
          <p>
            <%=Html.MytripInput("submit", CoreLanguage.save)%>
          </p>
     
    
      <% } %>

    Обработка в контроллере:

    [HttpPost]
        public ActionResult InstallModules(ModulesModel model)
        {
          var ts = hpRepo.alldllMassiveForModules();
          foreach (var tag in ts)
          {
            if (Boolean.Parse(Request.Form.GetValues(tag.Key)[0]))
            {
              hpRepo.CreateDataBase(tag.Key, culture); 
            }
          }
          return RedirectToAction("Index","Home");
        }
    • Помечено в качестве ответа I.Vorontsov 25 июня 2010 г. 6:34
    24 июня 2010 г. 10:07

Все ответы

  • Вам лучше почитать матчасть, ибо аналог из PHP тут несколько неуместен

    тут 2 варианта могу предложить, либо Вы исспользуете привязку, и не ориентируетесь на CheckBox'ы, а на данные, где выставили галку - там значение - true

    это лучший вариант

    либо работать с DOM моделью Silverlight, VisualTreeHelper, вроде называется класс, покопайте в этом направлении

    Удачи

    • Помечено в качестве ответа I.Vorontsov 17 июня 2010 г. 9:09
    17 июня 2010 г. 5:05
  • Пример из ASP MVC
    HTML:
    <form action="/Core/InstallModules" method="post">
    
           <input id="Mytrip_Articles" name="Mytrip.Articles" type="checkbox" value="true" /><input name="Mytrip.Articles" type="hidden" value="false" />
           Mytrip.Articles</div>
          <div class="editor-field">
           <input id="Mytrip_Rssparser" name="Mytrip.Rssparser" type="checkbox" value="true" /><input name="Mytrip.Rssparser" type="hidden" value="false" />
           Mytrip.Rssparser</div>
          <div class="editor-field">
           <input id="Mytrip_Votes" name="Mytrip.Votes" type="checkbox" value="true" /><input name="Mytrip.Votes" type="hidden" value="false" />
           Mytrip.Votes</div>
          
          <p>
            <input type="submit" value="Сохранить"></input>
          </p> 
      </form>
    

    .aspx:

    <% using (Html.BeginForm()) {%>
     
    
          <%foreach (var x in Model.modules)
           { %><div class="editor-field">
           <%=Html.CheckBox(x.Key) %>
           <%=x.Key %></div>
          <%} %>
          <p>
            <%=Html.MytripInput("submit", CoreLanguage.save)%>
          </p>
     
    
      <% } %>

    Обработка в контроллере:

    [HttpPost]
        public ActionResult InstallModules(ModulesModel model)
        {
          var ts = hpRepo.alldllMassiveForModules();
          foreach (var tag in ts)
          {
            if (Boolean.Parse(Request.Form.GetValues(tag.Key)[0]))
            {
              hpRepo.CreateDataBase(tag.Key, culture); 
            }
          }
          return RedirectToAction("Index","Home");
        }
    • Помечено в качестве ответа I.Vorontsov 25 июня 2010 г. 6:34
    24 июня 2010 г. 10:07
  • По-моему, вопрос заключался в другом. Имелось ввиду, что можно выбрать из списка несколько элементов с одной семантикой, т.е. например, отметить галочками интересы, по которым будет приходить рассылка. Здесь обычный хэлпер не поможет. Тоже постоянно сталкиваюсь с такой проблемой.

    В свое время мне помогла информация по этой ссылке: http://www.codehelper.ru/questions/333/%D0%BA%D0%B0%D0%BA-%D1%80%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D1%8C-%D0%BF%D1%80%D0%B8%D0%B2%D1%8F%D0%B7%D0%BA%D1%83-%D0%BA-%D1%81%D0%BF%D0%B8%D1%81%D0%BA%D1%83-binding-to-list-%D0%B2-aspnet-mvc

    Единственное, что у меня не получилось сделать именно так, как написал автор, поэтому я там ручками сделал. Вот примерный код:

    <% for (int i = 0; i < Model.Count; i++ )
      { %>
      <p><label>
      <input type="hidden" name="test.Index" value="<%= i.ToString() %>" />
      <input type="checkbox" name="<%= string.Format("test[{0}]", i) %>" value="<%= Html.Encode(Model[i].ID.ToString()) %>" />
      <%= Html.Encode(Model[i].Caption)%> (<%= Html.Encode(Model[i].Parallel.Number)%> класс, <%= Html.Encode(Model[i].Subject.Caption)%>)</label></p>
    <% } %>

    В итоге получится такой html:

     

    <form action="/Exchange/Download" id="form0" method="post">
      <p><label>
      <input name="test.Index" value="0" type="hidden">
      <input name="test[0]" value="d12c2aa8-4a8c-48dd-893e-00364ea6345b" type="checkbox">
      Тест по русскому языку для 9 классов (9 класс, Русский язык)</label></p>
    
      <p><label>
      <input name="test.Index" value="1" type="hidden">
      <input name="test[1]" value="4a975c56-3f21-44ba-83ed-777fe016fca6" type="checkbox">
      Тест по математике (11 класс, Математика)</label></p>
    
      <p><label>
      <input name="test.Index" value="2" type="hidden">
      <input name="test[2]" value="502c68aa-1e43-49d6-9d9f-e6148f400be6" type="checkbox">
    
      Тест по физике (10 класс, Физика)</label></p>
    
      <p><label>
      <input name="test.Index" value="3" type="hidden">
      <input name="test[3]" value="afb9ebf3-0a48-48e0-a308-eee0d099c6cd" type="checkbox">
      ывапа (3 класс, Литература)</label></p>
    

    А чтобы выполнить привязку данных, можно в параметре действия прописать так:

     

    public
     ActionResult Download(List<Guid> test, bool
     protectCode)
    {
     //...
    
    }
    

     

    22 августа 2010 г. 3:57