我有一个包含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" /> } }
基本上下拉列表有两个选项,即Accept和Deny我可以捕获用户通过控制器中的SWITCH-case选择哪一个现在如何捕获复选框的值?如果您注意到CheckBoxes有一个名为@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; } }
解决方法
发布到服务器时的复选框有点奇怪.
如果选中一个框,浏览器将发送name = value,如下所示
如果选中一个框,浏览器将发送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是bool的情况下,扩展将创建一个复选框输入标记以及一个具有相同名称的隐藏输入标记,这意味着值将始终传递给控制器方法.
希望这可以帮助.