2013-07-25 74 views
6

我有一个带有2个字段的表单和一个复选框。我把一切都正常工作,但我不能因为某些原因获得一个复选框的值,如果它被选中,这是我的代码..提交后mvc3复选框的值

[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选项接受拒绝我可以通过控制器中的SWITCH案例捕获用户选择哪一个现在如何捕获复选框的值?如果您注意到复选框有一个名为@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; } 
} 
+0

你的'Model'看起来像什么?另外,还可以给复选框添加一个通用名称,例如'selectedGroupRequestIds',然后在您的操作中接受'IEnumerable selectedGroupRequestIds'? –

+0

我刚编辑我的消息,并把模型,并确定我看你说什么给他们一个共同的名字,并通过使用GrouprequestID挑选出选定的值我会尽力 – user1591668

回答

17

检查框时发送到服务器的行为有些奇怪。 如果复选框被选中,浏览器将在

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

发送name=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输入标签,这意味着一个值将始终被传递到控制器方法。

希望这会有所帮助。

+0

完美谢谢你的回应,清除了一切,代码是工作! – user1591668

+0

+1的干净答案..... –