通过模型解析MVC4中已选中的复选框

时间:2013-11-09 18:05:02

标签: c# asp.net-mvc-4

有人能为我提供一个控制器的好例子来处理模型的已选中复选框吗?

例如。如何在控制器中仅抓取已检查的项目以及相应的下拉框值?

视图

 <form>
      <table>
           <tr>
                <td>
                    <input type="checkbox" name="something" value="12345" checked="true" />
                    <select>
                         <option value="1">1</option>
                         <option value="2">2</option>
                         <option value="3">3</option>
                    </select>
                </td>
           </tr>
           <tr>
                <td>
                     <input type="checkbox" name="something" value="54321" checked="false" />
                     <select>
                         <option value="1">1</option>
                         <option value="2">2</option>
                         <option value="3">3</option>
                     </select>
                </td>
           </tr>
           <tr>
                <td>
                     <input type="checkbox" name="something" value="11111" checked="false" />
                     <select>
                         <option value="1">1</option>
                         <option value="2">2</option>
                         <option value="3">3</option>
                     </select>
                </td>
           </tr>
      </table>
      <input type="submit" />
 </form>

模特

 public class FormCollection 
 {
   // how would this look?
 }

控制器

 public ActionResult Sort(FormCollection model)
 {
   FormCollection _model = new FormCollection();
   // iterate through model to get only values that are checked
   // add them to _model
   // how would this look?
 } 

1 个答案:

答案 0 :(得分:1)

首先,类FormCollection已经存在于框架中:http://msdn.microsoft.com/en-us/library/system.web.mvc.formcollection(v=vs.108).aspx所以如果要将提交的数据组合到模型中,请为模型类使用另一个名称。

其次,复选框列表会在IEnumerable<string>上绑定,因此您的操作可能如下所示:

public ActionResult Sort(IEnumerable<string> something)
{
  // iterates only checked items
  foreach(var item in something)
  {
    var correspondingDropdownValue = Request.Form[item]
  }
}

这需要在您的下拉列表中添加name字段,并使其与复选框值对应:

<input type="checkbox" name="something" value="11111" checked="false" />
<select name="11111">
    <option value="1">1</option>
    <option value="2">2</option>
    <option value="3">3</option>
</select>