在Mvc asp.net中获取选中的复选框值

时间:2009-01-22 11:24:10

标签: .net asp.net asp.net-mvc

我在列表中显示了复选框,我想访问哪个复选框被选中,并且想要调用控制器操作,我从下拉列表中选择选项

<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 个答案:

答案 0 :(得分:2)

在asp.net-MVC中你应该知道你希望能够在控制器端以表格形式访问的信息,我注意到你没有在你的复选框中添加一个ID,我的动态绑定是我的我正在使用asp.net-mvc附带的HTML帮助器:

   <% 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 :(得分:1)

如果您计划提交此表单,并对服务器端的复选框值执行任何操作,则需要为其提供名称属性(并且组中的每个复选框的名称应该相同)。 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文档中是唯一的。因此,使用ID“Checkbox1”创建大量复选框并不是一个好主意。 (如果该输入元素是runat =“server”,那么.NET将从WebForms ID 生成唯一的HTML id

答案 2 :(得分:-1)

您可以遍历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