Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 复选框返回“;“对,错”;从formcollection而不是所选值_Asp.net Mvc_Checkbox - Fatal编程技术网

Asp.net mvc 复选框返回“;“对,错”;从formcollection而不是所选值

Asp.net mvc 复选框返回“;“对,错”;从formcollection而不是所选值,asp.net-mvc,checkbox,Asp.net Mvc,Checkbox,我在我的aspx页面中使用HtmlHelper.CheckBox有多个复选框 在js文件中使用ajax提交表单时 var-input=$(':input') 在控制器动作方法中,如下所示 public ActionResult Post(FormCollection Form) { } 在表单中,我没有得到复选框的更新值,即所有复选框值都已更新 返回为“true,false”。 如果任何复选框没有被选中或取消选中…表单不会返回为false,它仍然返回为“true,false”而不是fa

我在我的aspx页面中使用HtmlHelper.CheckBox有多个复选框

在js文件中使用ajax提交表单时
var-input=$(':input')

在控制器动作方法中,如下所示

 public ActionResult Post(FormCollection Form)
 {

 }
在表单中,我没有得到复选框的更新值,即所有复选框值都已更新 返回为“true,false”。 如果任何复选框没有被选中或取消选中…表单不会返回为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检索复选框的更新值

$.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) %>
<% } %>

x、 项目[i].Id)%>
x、 项目[i].IsSelected)%>

您可以尝试以下方法:

bool checkedValue = Form["checkbox0"].Contains("true");
试试这个

string abc =  ((string[])(collection.GetValue("checkbox0").RawValue))[0];

我也遇到了同样的问题,然后遇到了下面的链接

$(窗口)。加载(函数(){
$(“输入:复选框”)。每个(函数(){
fixHiddenCheckField(此字段);
});
$(“输入:复选框”).change(函数(){
fixHiddenCheckField(此字段);
});
});
函数fixHiddenCheckField(checkField){
变量名称=$(checkField).attr(“名称”);
var hiddenSelector=“输入:隐藏[name=“+name+”]”;
var checkBoxesInListSelector=“输入:复选框[name=“+name+”]”;
var checkedCheckBoxesInListSelector=“输入:选中[name=“+name+”]”;
if($(checkedCheckBoxesInListSelector).length>=1 | |$(checkBoxesInListSelector).length>1){
$(“输入”).remove(隐藏选择器);
}
否则{
if($(hiddenSelector).length==0)
$(checkField).parents(“表单”).append(“”);
}
}

在博客中解释说,上面的代码在选中复选框时删除隐藏字段,然后在未选中时将一个重复字段添加回父窗体。要处理列表,请检查具有此名称的复选框的总长度。如果有多个字段,则假定这是一个列表,因此我们将删除隐藏字段。如果我们需要一个未经检查的列表来生成单个值false,只需在If语句中不检查$(checkBoxesInListSelector).length>1。

我还有其他控件,如Html文本框、下拉列表……还有……请告诉我如何处理该值same@user1065358,您只需将相应的属性添加到视图模型中即可。我也注意到了这一点,并且在过去的IE旧版本中也看到过这种情况(或者如果我使用javascript?),无论如何,我修改了Trent的答案,以防有人不知道如何解释这两种情况:):-bool checkedValue=(fc[“checkbox0”!=null&(fc[“checkbox0”].Contains(“true”)| | fc[“checkbox0”]。Contains(“on”)?true:false);
string abc =  ((string[])(collection.GetValue("checkbox0").RawValue))[0];
$(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' />");
    }
}