Синтаксический анализ сообщений из таблицы в ASP.NET MVC - PullRequest
1 голос
/ 09 января 2009

Хорошо, я новичок в MVC, пришедший из сети, поэтому прошу прощения за любое невежество здесь. Вот мой сценарий. У меня есть таблица, состоящая из списка приложений и соответствующих разрешений. Каждая строка таблицы состоит из 3 частей информации: флажок, некоторый текст, описывающий строку, и раскрывающийся список, позволяющий пользователю выбрать соответствующее разрешение для приложения. Я хочу опубликовать эти данные и работать только со строками в таблице, которые были проверены (идентификатор строки встроен как имя флажка). Оттуда я хочу получить выбранное значение из DropDownList и вызвать необходимый код для обновления БД. Вот код моей страницы просмотра:

            <%foreach (var app in newApps)
              { %>
                <tr>
                    <td><input type="checkbox" name="AddApps" value="<%=app.ApplicationId %>" /></td>
                    <td><%=Html.Encode(app.ApplicationName)%></td>
                    <td><%=Html.DropDownList("AppRole", new SelectList(app.Roles, "RoleId", "RoleDescription"))%></td>
                </tr>
              <%} %>

Как мне получить соответствующие значения из FormCollection, когда я доберусь до контроллера при отправке формы? Я делал это в прошлом, когда у меня были только значения флажков для извлечения, просто вызвав Request.Form ["CheckBoxName"] и проанализировав строку.

Или я совершенно ошибаюсь?

Ответы [ 2 ]

2 голосов
/ 10 января 2009

Вы на полпути, чтобы опубликовать ваши данные, чтобы контроллер мог прочитать информацию, которая должна быть внутри формы, как показано ниже:

       <% using(Html.BeginForm("Retrieve", "Home")) %>//Retrieve is the name of the action while Home is the name of the controller
       <% { %>
            <%foreach (var app in newApps)              { %>  
          <tr> 
               <td><%=Html.CheckBox(""+app.ApplicationId )%></td>      
          <td><%=Html.Encode(app.ApplicationName)%></td>
                <td><%=Html.DropDownList("AppRole", new SelectList(app.Roles, "RoleId", "RoleDescription"))%></td> 
           </tr>  
        <%} %>
       <input type"submit"/>
     <% } %>

и на вашем контроллере:

      public ActionResult Retrieve()
    {
        //since all variables are dynamically bound you must load your DB into strings in a for loop as so:
      List<app>=newApps;
      for(int i=0; i<app.Count;i++)
      {


        var checkobx=Request.Form[""+app[i].ApplicationId];
        // the reason you check for false because the Html checkbox helper does some kind of freaky thing for value true: it makes the string read "true, false"
          if(checkbox!="false")
          {
          //etc...almost same for other parameters you want that are in thr form
          }

       }
    //of course return your view
    return View("Index");//this vaires by the name of your view ex: if Index.aspx
   }

Этот сайт предоставляет более подробную информацию о том, как обращаться с помощником раскрывающегося списка:

http://quickstarts.asp.net/previews/mvc/mvc_HowToRenderFormUsingHtmlHelpers.htm

1 голос
/ 10 января 2009

Request.Form будет по-прежнему работать, за исключением того, что все ваши флажки имеют одинаковое имя.

Так что одним из способов было бы присвоить чекбоксам разные имена, например, «AddApps-app.id» и используйте Request.Form.

Однако более элегантный и проверяемый способ - использовать привязку списка.

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

Преимущество здесь в том, что ваш контроллер имеет дело только с экземплярами типа приложения и, следовательно, не имеет неявной зависимости от структуры представления. Поэтому очень легко провести модульное тестирование.

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