我在视图页面中有一个表单,如下所示:
<form runat="server" id="dcrsubmit">
<asp:CheckBoxList ID="CheckBoxList1" runat="server">
<asp:ListItem>test1</asp:ListItem>
<asp:ListItem>test2</asp:ListItem>
<asp:ListItem>test3</asp:ListItem>
<asp:ListItem>test4</asp:ListItem>
<asp:ListItem>test5</asp:ListItem>
<asp:ListItem>test6</asp:ListItem>
</asp:CheckBoxList>
....other controls
</form>
现在发布表单时,我正在尝试检索控制器中提交的值,如下所示:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult testmethod(FormCollection formValues)
{
string s = formvalues.get("CheckBoxList1");
.
. /* other code */
.
}
当我通过选中一些复选框提交表单时,字符串值显示为null。这是检索值的方法还是我做错了什么?我不能使用html控件,因为窗体上的所有其他控件都是服务器控件,我不确定我是否只能将此控件作为html控件。而且我不确定如何将值绑定到它?
答案 0 :(得分:2)
MVCContrib提供了一些优秀的扩展来提供许多控件,它们还有一个CheckBoxList。
开始使用MVCContrib,read this
您需要使用强类型视图并在视图中包含此import语句:
<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<MvcApplication1.Models.HomeModel>" %>
<%@ Import Namespace="MvcContrib.FluentHtml" %>
此示例有效。这是视图上的代码。
<%= this.CheckBoxList("UserType").Options(Model.UserTypeOptions) %>
这是控制器。
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Submit(HomeModel viewModel)
{
if (viewModel.SelectedUserType == UserTypeEnum.Normal)
{
// do something
}
return View("Index", viewModel);
}
这是模型。
public enum UserTypeEnum
{
Administrator = 0,
SuperUser,
Supervisor,
Normal,
}
public class HomeModel
{
[Required]
public string Name { get; set; }
public List<SelectListItem> UserTypeOptions { get; set; }
public string UserType { get; set; }
public UserTypeEnum SelectedUserType
{
get
{
return (UserTypeEnum) Enum.Parse(typeof (UserTypeEnum), UserType);
}
}
public HomeModel()
{
UserTypeOptions = new List<SelectListItem>
{
new SelectListItem{Text = "Administrator", Value = ((int)UserTypeEnum.Administrator).ToString()},
new SelectListItem{Text = "SuperUser", Value = ((int)UserTypeEnum.SuperUser).ToString()},
new SelectListItem{Text = "Supervisor", Value = ((int)UserTypeEnum.Supervisor).ToString()},
new SelectListItem{Text = "Normal", Value = ((int)UserTypeEnum.Normal).ToString()},
};
}
}
答案 1 :(得分:0)
我认为你需要的是如何收集用户选择的CheckBoxList中的选定值,这是我的解决方案:
1-下载Jquery.json.js并将其作为参考添加到您的视图中:
<script src="../../Scripts/jquery.json.js" type="text/javascript"></script>
2- I've added a ".cssMyClass" to all checkboxlist items so I grab the values by their css class:
<script type="text/javascript" >
$(document).ready(function () {
$("#btnSubmit").click(sendValues);
});
function populateValues()
{
var data = new Array();
$('.myCssClas').each(function () {
if ($(this).attr('checked')) {
var x = $(this).attr("value");
data.push(x);
}
});
return data;
}
function sendValues() {
var data = populateValues();
$.ajax({
type: 'POST',
url: '@Url.Content("~/Home/Save")',
data: $.json.encode(data),
dataType: 'json',
contentType: 'application/json; charset=utf-8',
success: function () { alert("1"); }
});
}
</script>
3-正如您所看到的,我已将所有选定的值添加到数组中,并通过ajax将其传递给“Home”控制器的“Save”操作 在Controller中,您可以通过添加数组作为参数来接收值:
[HttpPost]
public ActionResult Save(int[] val)
{
我搜索得太多,但显然这是唯一的解决方案。如果您找到更好的解决方案,请告诉我。