6

我有一个包含 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" />


}
}

基本上,下拉列表有 2 个选项,分别是AcceptDeny我现在可以通过控制器中的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; }
}
4

1 回答 1

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)

扩展将创建一个MyValue输入标签和一个具有相同名称的输入标签,这意味着一个值将始终传递给控制器​​方法。boolcheckboxhidden

希望这可以帮助。

于 2013-07-25T21:22:43.510 回答