Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/260.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.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# ASP.NET MVC中的模型绑定嵌套列表问题_C#_.net_Asp.net Mvc_Asp.net Mvc 4_Razor - Fatal编程技术网

C# ASP.NET MVC中的模型绑定嵌套列表问题

C# ASP.NET MVC中的模型绑定嵌套列表问题,c#,.net,asp.net-mvc,asp.net-mvc-4,razor,C#,.net,Asp.net Mvc,Asp.net Mvc 4,Razor,我试图将视图绑定到一个模型,该模型包含列表中的列表。当然,我更喜欢使用开箱即用的模型绑定。昨天花了一些时间在上面,我发现了一个解决方法,这真的是一个黑客,我想纠正这一点。我的模型的基本结构如下: public class MyMPIModel { public List<ScoreInfo> ScoreInfo { get; set; } } public class ScoreInfo { public int ScorePrefId { get; set; }

我试图将视图绑定到一个模型,该模型包含列表中的列表。当然,我更喜欢使用开箱即用的模型绑定。昨天花了一些时间在上面,我发现了一个解决方法,这真的是一个黑客,我想纠正这一点。我的模型的基本结构如下:

public class MyMPIModel
{
    public List<ScoreInfo> ScoreInfo { get; set; }
}

public class ScoreInfo 
{
    public int ScorePrefId { get; set; }
    public List<Category> Categories { get; set; }
}

public class Category
{
    public int Id;
    public string Name;
    public bool Checked;
}
但是,当我发布到控制器、设置断点并检查模型时,ScoreInfo对象列表已填充,但ScoreInfo对象内的类别对象列表尚未填充

我的控制器中有以下POST操作:

[HttpPost]
public ActionResult InterestCategories(MyMPIModel model, FormCollection form)
{
    ...

    //  model would not bind forcing me to populate via form collection
    for (var i = 0; i < model.ScoreInfo.Count; i++)
    {
        ...
        for (var j = 0; j < scoreInfo.Categories.Count; j++)
        {
                var category = scoreInfo.Categories[j];

                var prefix = "ScoreInfo[" + i + "].Categories[" + j + "]";

                category.Name = form[prefix + ".Name"];

                var sId = form[prefix + ".Id"];
                if (sId != null) category.Id = Int32.Parse(sId);

                var sChecked = form[prefix + ".Checked"];
                if (sChecked != null) category.Checked = sChecked.Contains("true");
        }
    }
}
[HttpPost]
公共行动结果利益分类(MyMPIModel模型、FormCollection表单)
{
...
//模型无法绑定,强制我通过表单集合填充
对于(变量i=0;i
您必须在类别类中使用属性而不是字段:

public class Category
{
    public int Id { get; set; }
    public string Name { get; set; }
    public bool Checked { get; set; }
}

谢谢你,真是太棒了!!我在重用另一个开发人员的模型,该模型来自系统中类似故障的部分。这将解释为什么。如果在集合值中间移走(例如,你有一个动态的网格来显示它的内联删除按钮)会发生什么。模型绑定仍然有效或者给出错误。帮助
@Html.HiddenFor(x => x.Id)
@Html.HiddenFor(x => x.Name)
<label>
    @Html.CheckBoxFor(x => x.Checked, new { @class = "check"})
    <span>@Model.Name</span>
</label>
ScoreInfo[0].Categories[1].Id   2
ScoreInfo[0].Categories[1].Name Managing Money
ScoreInfo[0].Categories[1].Checked  false
[HttpPost]
public ActionResult InterestCategories(MyMPIModel model, FormCollection form)
{
    ...

    //  model would not bind forcing me to populate via form collection
    for (var i = 0; i < model.ScoreInfo.Count; i++)
    {
        ...
        for (var j = 0; j < scoreInfo.Categories.Count; j++)
        {
                var category = scoreInfo.Categories[j];

                var prefix = "ScoreInfo[" + i + "].Categories[" + j + "]";

                category.Name = form[prefix + ".Name"];

                var sId = form[prefix + ".Id"];
                if (sId != null) category.Id = Int32.Parse(sId);

                var sChecked = form[prefix + ".Checked"];
                if (sChecked != null) category.Checked = sChecked.Contains("true");
        }
    }
}
public class Category
{
    public int Id { get; set; }
    public string Name { get; set; }
    public bool Checked { get; set; }
}