Asp.net mvc 从ASP.NET MVC中的表解析表单Post值?

Asp.net mvc 从ASP.NET MVC中的表解析表单Post值?,asp.net-mvc,Asp.net Mvc,好的,我是一名来自webforms背景的MVC新手,请原谅我的无知。这是我的设想。我有一个由应用程序和相关权限列表组成的表。每个表行由3条信息组成:一个复选框、一些描述该行的文本和一个下拉列表,允许用户为应用程序选择适当的权限。我想发布这些数据,并且只处理表中已选中的行(该行的id作为复选框名称嵌入)。从那里,我想从DropDownList中获取所选的值,并调用必要的代码来更新数据库。以下是我的查看页面的代码: <%foreach (var app in newAp

好的,我是一名来自webforms背景的MVC新手,请原谅我的无知。这是我的设想。我有一个由应用程序和相关权限列表组成的表。每个表行由3条信息组成:一个复选框、一些描述该行的文本和一个下拉列表,允许用户为应用程序选择适当的权限。我想发布这些数据,并且只处理表中已选中的行(该行的id作为复选框名称嵌入)。从那里,我想从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>
              <%} %>

当我到达FormPost上的控制器时,如何从FormCollection中检索适当的值?在过去,我只需调用Request.Form[“CheckBoxName”]并解析字符串,就可以检索复选框值


还是我完全错了?

为了让控制器能够读取表单中的信息,您的数据发布正确了一半,因此:

       <% 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"/>
     <% } %>
//Retrieve是操作的名称,Home是控制器的名称
在控制器上:

      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
   }
公共操作结果检索() { //由于所有变量都是动态绑定的,因此必须将DB加载到for循环中的字符串中,如下所示:
List

Request.Form仍然有效,只是您的复选框都具有相同的名称

因此,一种方法是为复选框指定不同的名称,例如“AddApps app.id”,并使用Request.Form

然而,一种更优雅和可测试的方法是使用列表绑定

在这个模型中,您给表单元素一个特定的结构化名称,默认的模型绑定器将把每组表单元素包装到控制器中的一个类型化记录列表中

这里的优点是,您的控制器只处理应用程序类型的实例,因此对视图的结构方式没有隐含的依赖关系。因此,单元测试非常容易。

查看此链接