提交后的mvc3复选框值

时间:2013-07-25 20:33:50

标签: asp.net-mvc-3 checkbox foreach

我有一个包含2个字段的表单,一个下拉列表和一个复选框。我有一切正常工作,但我不能因为某些原因获得复选框的值,如果选中它是我的代码..

[HttpPost]
    public ActionResult view(string pick)
    {

        switch (pick)
        {
            case "Deny":
                // capture checkbox value here
                break;
            case "Accept":
                // capture checkbox value here
                break;

        }
        return View();
    }

这是我的观点

@using (Html.BeginForm("view", "grouprequest", FormMethod.Post, new {}))
{


 @Html.DropDownList("pick", new SelectList(new List<Object>{ 
                new{ Text ="Accept", Value= "Accept"},new{ Text ="Deny", Value= "Deny"}},    "Value", "Text"), new {})

 <input type="submit" name="work" id="work" value="Update" style="font-size:16px" />

foreach (var item in Model)
{
 <input type="checkbox" id="@item.grouprequestID" name="@item.grouprequestID"  value="@item.grouprequestID" />


}
}

基本上,下拉列表有两个选项,分别是接受拒绝我可以通过 SWITCH-case 来捕获用户选择的那个控制器现在如何捕获复选框的值?如果您注意到复选框有一个名为 @groupRequestID 的变量,那么每个复选框都有不同的唯一值,如1,2,3等。任何帮助都将非常感谢!!

模特

 public class grouprequest
{
    [Key]
    public int grouprequestID { get; set; }
    public int? profileID { get; set; }
    public int? registrationID { get; set; }
    public DateTime expires { get; set; }
    public int? Grouplink { get; set; }
}

1 个答案:

答案 0 :(得分:17)

发布到服务器时的复选框有点奇怪。 如果选中一个框,浏览器将发送name=value,如

<input type="checkbox" name="name" value="value" />

但如果复选框,则服务器不会发送任何内容。

<input type="checkbox" name="Check1" id="Checks1" value="Hello" checked="checked"/>
<input type="checkbox" name="Check1" id="Checks1" value="Hello1" />
<input type="checkbox" name="Check1" id="Checks1" value="Hello2" />

将导致Check1 = Hello

这意味着如果所有复选框都相关,那么命名它们将填充ActionMethod的相同属性。如果该属性是枚举,则它将仅包含已检查的属性。

如果你认为有这个:

<input type="checkbox" name="MyValues" value="1" checked="checked"/>
<input type="checkbox" name="MyValues" value="2" />
<input type="checkbox" name="MyValues" value="3" />

这是你的控制器动作方法:

public ActionMethod MyAction(IEumerable<int> myValues)

myValues变量将如下所示:

myValues[0] == 1

您还应注意,如果您使用的是Html助手扩展程序:

@Html.CheckBoxFor(m => m.MyValue)

如果MyValuebool,则扩展程序将创建checkbox输入标记以及具有相同名称的hidden输入标记,这意味着将始终传递值进入控制器方法。

希望这有帮助。