Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/312.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
C# IEnumerable数据不从视图传回控制器_C#_Asp.net Mvc 4 - Fatal编程技术网

C# IEnumerable数据不从视图传回控制器

C# IEnumerable数据不从视图传回控制器,c#,asp.net-mvc-4,C#,Asp.net Mvc 4,在我的MVC4项目视图中,我将IEnumerable模型传递给视图。当我将表单提交回控制器时,控制器方法的参数为IEnumerable data。问题是数据总是空的 查看 @model IEnumerable<Settings> @using (Html.BeginForm("Index", "Layout", FormMethod.Post))) { @foreach (var item in Model) { @Html.CheckBoxFor(m

在我的MVC4项目视图中,我将
IEnumerable
模型传递给视图。当我将表单提交回控制器时,控制器方法的参数为
IEnumerable data
。问题是
数据
总是空的

查看

@model IEnumerable<Settings>

@using (Html.BeginForm("Index", "Layout", FormMethod.Post)))
{
    @foreach (var item in Model)
    {
       @Html.CheckBoxFor(modelItem => item.IsActive, new { @value = item.Id })
       @Html.DisplayFor(modelItem => item.Name)
    }
    <input type="submit" value="Save" />
}
更新: *呈现HTML*


#碎片
更新1: 按照Andrei的回答呈现HTML

<td>
     <input checked="checked" data-val="true" data-val-required="The IsActive field is required." name="[0].IsActive" type="checkbox" value="13"><input name="[0].IsActive" type="hidden" value="false">
                                    # of pieces</td>

#碎片

可能需要将您的输入包装成一个表单:

@using (Html.BeginForm()) {
   @foreach (var item in Model)
   {
      @Html.CheckBoxFor(modelItem => item.IsActive, new { @value = item.Id })
      @Html.DisplayFor(modelItem => item.Name)
   }
   <input type="submit" value="Save" />
}
@使用(Html.BeginForm()){
@foreach(模型中的var项目)
{
@CheckBoxFor(modelItem=>item.IsActive,新的{@value=item.Id})
@DisplayFor(modelItem=>item.Name)
}
}

您可以发布渲染的html吗

我认为问题在于: 输入的名称(复选框)在html中将是
IsActive
。点击submit时,表单将使用键
IsActive
提交数据。在控制器中,您当前需要一个名为
data
的参数,因此存在不匹配

您可以通过在控制器中添加断点并检查请求[“IsActive”]是否有值来解决此问题

更新: 您可以查看演练:

我想您可以先尝试将输入的
名称
更改为
数据
。您可以尝试通过以下方式实现:

@Html.CheckBoxFor(modelItem => item.IsActive, new { @value = item.Id, name="data" })
更改后,表单应向控制器提交以逗号分隔的值列表。你能不能也打开firebug并在这里发布发布发布到控制器的内容

@Html.CheckBoxFor(modelItem => item.IsActive, new { @value = item.Id })
不会为输入生成正确的名称。您的表单为所有项目发送相同的令牌
项。IsActive=true
(或false)。虽然这种方法适用于原语,但不适用于复杂类型

但是,以下是使用
for
而不是
foreach
可以做的事情:

@model IList<Settings>

@using (Html.BeginForm())
{
    @for(int i=0; i<Model.Count; i++)
    {
       @Html.CheckBoxFor(m => m[i].IsActive, new { @value = Model[i].Id })
       @Html.DisplayFor(m => m[i].Name)
    }
    <input type="submit" value="Save" />
}
@model-IList
@使用(Html.BeginForm())
{
@对于(int i=0;i m[i].i活动,新{@value=Model[i].Id})
@DisplayFor(m=>m[i].Name)
}
}

请注意,这至少需要
IList
作为视图类型-否则您无法使用
for

遍历集合您的控制器方法命中了吗?@BhushanFirake,是的,命中了,从那里我只分析了即时窗口,数据是索引操作方法的nullpost代码,你是如何从控制器返回结果的?@SanjeevRai,我将以视图模型的形式传递
Collection
…我已经添加了,只是添加了部分代码。请参阅我的更新也可以将
bool[]IsActive,string[]Name
作为参数+1,有价值的建议,并在即时窗口中选中'Request[“IsActive”],值为null@sTodorov我用呈现的HTML更新了我的问题,你能检查一下吗?+1,你好,这部分有效,现在数据不是空的,但是属性
IsActive
始终为
false
is
始终为。我的意思是说,它的所有属性值都是默认的,而不是发布的…@SSS,您对类
设置
的建模是什么样子的?此外,现在正在为checkbox生成什么HTML?@SSS,出于某种原因,您在那里有两个输入,一个是checkbox,另一个是隐藏的。它们有相同的名称,并且都是发布的(针对每个项目),显然后者是隐藏的,由MVC拾取。由于所有隐藏项的值都设置为
false
,因此这就是您得到的结果。我不确定此隐藏输入来自何处,但您需要删除它或为其指定其他名称,以使复选框正常工作。感谢您的时间,我接受您的回答,我刚刚通过从复选框中删除值字段进行了修复,我将其放在另一个隐藏字段中,现在它工作正常。。。
@Html.CheckBoxFor(modelItem => item.IsActive, new { @value = item.Id, name="data" })
@Html.CheckBoxFor(modelItem => item.IsActive, new { @value = item.Id })
@model IList<Settings>

@using (Html.BeginForm())
{
    @for(int i=0; i<Model.Count; i++)
    {
       @Html.CheckBoxFor(m => m[i].IsActive, new { @value = Model[i].Id })
       @Html.DisplayFor(m => m[i].Name)
    }
    <input type="submit" value="Save" />
}