получение выбранного значения флажка в Mvc asp.net - PullRequest
5 голосов
/ 22 января 2009

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

<div id="pnlSent" style="display: none">
            <%= Html.DropDownList("select","msgtype") %>
            <% foreach (Usp_GetUserMessagesResult w in (List<Usp_GetUserMessagesResult>)ViewData["UListM"])
               { %>
                <li>
            <div class="question-info">

                <input id="Checkbox1" type="checkbox" onclick="function() { alert("df") ; } "  />

                <div class="views count"><span></span></div>
                <div class="question">
                    <div class="meta">Subject:  <%= w.Subject %></div>
                    <div class="meta">To: <%= w.Username  %></div>
                    <h3 class="title"><%= Html.Encode(w.Mesg)%></h3>
                </div>
            </div>
        </li>
            <% } %>

    </div>

Ответы [ 3 ]

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

В asp.net-MVC вы должны иметь информацию, к которой вы хотите иметь доступ на стороне контроллера, в форме, поэтому я заметил, что вы не добавили идентификатор в свой флажок, мой динамически связан, и я я использую помощник HTML, который поставляется с asp.net-mvc:

   <% 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>      

       </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 checkbox=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 голос
/ 23 января 2009

Если вы планируете отправить эту форму и что-то сделать со значениями флажков на стороне сервера, вам нужно присвоить им имя и значение атрибуты (и имя должно быть одинаковым для каждого флажка в группе). Помощник по флажкам, о котором упоминал TStamper, позаботится об этом за вас.

Если вы просто хотите, чтобы действие клиента происходило, когда флажок отмечен или снят, вы можете сделать что-то подобное (я предполагаю, что эти объекты имеют какое-то ключевое поле; я называю это MessageID ):

<script type="text/javascript">
function handleCheckbox( theBox ) {
  if( theBox.checked) {
    // do checked stuff
  }
  else {
    // do un-checked stuff
  }
}
</script>

...

<input type="checkbox" value="<%= w.MessageID %>" onclick="handleCheckbox(this)"  />

Обратите внимание, что значения id должны быть уникальными в документе HTML. Поэтому создание большого количества флажков с идентификатором «Checkbox1» не очень хорошая идея. (Если бы этот элемент ввода был runat = "server", то .NET генерировал бы уникальный HTML id из WebForms ID .

0 голосов
/ 22 января 2009

Вы можете просмотреть все элементы управления в div pnlsent, и, если тип элемента управления является флажком, вы можете определить, установлен ли флажок.

Пример зацикливания элементов управления в VB ....

 For Each ctrl As Control In Page.Controls
        If TypeOf ctrl Is TextBox Then
            CType(ctrl, TextBox).BackColor = clr
        Else
            If ctrl.Controls.Count > 0 Then
                SetTextBoxBackColor(ctrl, clr)
            End If
        End If
    Next
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...