我使用HtmlHelper.CheckBox在我的aspx页面中有多个复选框
并在js文件中使用ajax提交表单时
var input = $(':input');
$.ajax({
type: 'POST',
url: "/Home/Post",
data: input,
dataType: 'json',
success: function () {
},
});
并在控制器动作方法中如下所示..
public ActionResult Post(FormCollection Form)
{
}
并在表单中我没有获取复选框的更新值,即所有复选框值都是 返回为“真,假”。 如果没有选中或取消选中任何复选框...表单不会返回false,它仍会返回“true,false”而不是false。
即使我尝试过
Form.Get("checkbox0").ConvertTo(typeof(Boolean))
Request.Form["checkbox0"]
aboce代码返回“true,false”但是复选框0未选中,所以它应该返回false,这不会发生.... ???
但是当我尝试在aspx文件中使用Html.BeginForm("Post","Home",FormMethod.Post,new {id="x"})
时
并删除了js文件中的ajax调用...
然后控制器中的formcollection开始给我复选框的预期值...
但是随着这种方法一页一页地提交......我只需要使用ajax方法 ..
请告诉我如何在使用ajax 时从formcollection中检索复选框的更新值。
答案 0 :(得分:11)
您可以随时尝试:
bool checkedValue = Form["checkbox0"].Contains("true");
答案 1 :(得分:3)
试试这样:
$.ajax({
type: 'POST',
url: '/Home/Post',
data: $('form').serialize(),
dataType: 'json',
success: function () {
},
});
我还建议您使用视图模型:
[HttpPost]
public ActionResult Post(MyViewModel model)
{
...
}
例如,您有一个值列表:
public class MyViewModel
{
public ItemViewModel[] Items { get; set; }
}
public class ItemViewModel
{
public int Id { get; set; }
public bool IsSelected { get; set; }
}
并为您在强类型视图中生成了一个复选框列表:
<% for (var i = 0; i < Model.Items.Length; i++) { %>
<%= Html.HiddenFor(x => x.Items[i].Id) %>
<%= Html.CheckBoxFor(x => x.Items[i].IsSelected) %>
<% } %>
答案 2 :(得分:1)
试试这个
string abc = ((string[])(collection.GetValue("checkbox0").RawValue))[0];
答案 3 :(得分:-1)
我也遇到了同样的问题,然后遇到了以下链接 http://www.mindstorminteractive.com/topics/jquery-fix-asp-net-mvc-checkbox-truefalse-value/
$(window).load(function () {
$("input:checkbox").each(function () {
fixHiddenCheckField(this);
});
$("input:checkbox").change(function () {
fixHiddenCheckField(this);
});
});
function fixHiddenCheckField(checkField) {
var name = $(checkField).attr("name");
var hiddenSelector = "input:hidden[name=" + name + "]";
var checkBoxesInListSelector = "input:checkbox[name=" + name + "]";
var checkedCheckBoxesInListSelector = "input:checked[name=" + name + "]";
if ($(checkedCheckBoxesInListSelector).length >= 1 || $(checkBoxesInListSelector).length > 1) {
$("input").remove(hiddenSelector);
}
else {
if ($(hiddenSelector).length == 0)
$(checkField).parents("form").append("<input type='hidden' name='"+name+"' value='false' />");
}
}
在博客中解释说,上面的代码在选中框时会删除隐藏字段,然后在取消选中时将重复的字段添加回父表单。要处理列表,请使用此名称检查复选框的总长度。如果有多个,则假定这是一个列表,因此我们删除隐藏的字段。如果我们需要一个未经检查的列表来生成单个false值,则不要检查$(checkBoxesInListSelector).length&gt; if语句中的1。