C# ASP.NET MVC集合在控制器中为空

C# ASP.NET MVC集合在控制器中为空,c#,asp.net-mvc,C#,Asp.net Mvc,已解决 我必须在控制器中填写集合,然后使用下面评论中解释的方法。谢谢大家的帮助:) 我有一个简单的网站,在那里我想把特定食物的价格加到所有商店里。 我选择了这个项目,比如苹果,然后列出了我可以添加价格的所有商店 模型有一个集合(列表)。在视图中,我浏览商店,创建价格的新实例,在文本框中输入价格并将其添加到集合中 问题是,控制器中的集合为空 有什么建议吗?谢谢 编辑:商店收藏只是为了提供ShopID。Prices collection是一个空视图,我需要填充它来处理控制器中的数据 型号: publ

已解决 我必须在控制器中填写集合,然后使用下面评论中解释的方法。谢谢大家的帮助:)

我有一个简单的网站,在那里我想把特定食物的价格加到所有商店里。 我选择了这个项目,比如苹果,然后列出了我可以添加价格的所有商店

模型有一个集合(列表)。在视图中,我浏览商店,创建价格的新实例,在文本框中输入价格并将其添加到集合中

问题是,控制器中的集合为空

有什么建议吗?谢谢

编辑:商店收藏只是为了提供ShopID。Prices collection是一个空视图,我需要填充它来处理控制器中的数据

型号:

public class PriceMultiple
{
    private List<Price> _NewPrices;
    public List<Price> NewPrices 
    { 
        get
        {
            if (_NewPrices == null)
                _NewPrices = new List<Price>();
            return _NewPrices;
        }
        set { _NewPrices = value; }
    }
...
}
公共类价格多
{
私人清单(新价格);;
公开价目表
{ 
得到
{
如果(_NewPrices==null)
_NewPrices=新列表();
退货价格;
}
设置{u NewPrices=value;}
}
...
}
视图:

。。。
@foreach(在ViewBag.ShopsToLoad中购物)
{
价格=新价格();
price.ItemID=Model.ItemID.Value;
price.ShopID=shop.ShopID;
@商店名称
@Html.Label(“price.Value”、“Cena”)
@编辑器(“price.Value”)
Model.NewPrices.Add(价格);
}
...

根据过去的经验,使用基本表单将集合发布到控制器给我带来了麻烦

我建议您使用Javascript MVVC框架来收集这些值,然后发布到控制器


我用击倒和角度来做这件事。如果你感兴趣的话,击倒是一个比较简单的开始

您的问题源于呈现的标记不符合模型绑定的ASP.Net Wire格式:

参考:

简言之,您需要确保在处理集合时,表单控件具有非常特定的名称。参考文献:

我们读取属性的方法是查找parameterName[index].PropertyName。索引必须以零为基础且不间断

您还没有提供视图所键入的模型,所以我在这里猜测,但是您的控件需要渲染为如下内容:

<input type="text" name="shop[0].price[0]" />
<input type="text" name="shop[0].price[1]" />
<input type="text" name="shop[1].price[0]" />
<input type="text" name="shop[1].price[1]" />

Razor中的股票助手不会为您构建这些工具,您必须构建一个自定义编辑器,或者只需将输入写出来——记住,MVC不会妨碍您

@for(var i = 0; i < ViewBag.ShopsToLoad.length; i++){
    @for(var j = 0; j < ViewBag.ShopsToLoad[i].Prices.length; j++){
       <input type="text" name="shop[@i].price[@j]" />
    }
}
@for(变量i=0;i
如果您在控制器和模型方面做了更多的工作,并为视图提供了一个强类型模型来处理,您的生活可能会变得更轻松一些

下面是我的想法,所以不要只是剪切和粘贴它,并期待它的工作

模型

控制器

public ActionResult Prices()
{
    var pricesByShop = new List<PriceByShop>();

    // some code here to add an object to the list for each shop
    // initialize Price with existing price or set to 0...

    return View( pricesByShop );
}
公共行动结果价格()
{
var pricesByShop=新列表();
//这里有一些代码,用于将对象添加到每个商店的列表中
//使用现有价格初始化价格或设置为0。。。
返回视图(pricesByShop);
}
看法

@型号列表
@for(int i=0;imodel[i].Price,“Cena”)
@EditorFor(model=>model[i].Price)
}

您是否可以发布控制器的一部分,在该部分中,您实际设置了NewPrices列表的值,因为其他一切似乎都正常。prices集合属于该模型。商店收藏只提供ShopID和重复次数,仅此而已。我需要做的是,将项目添加到价格集合中,这属于模型(PriceMultiple)好的,解决了,我必须在控制器中填充集合。谢谢你,我可能会有这个问题:)
public ActionResult Prices()
{
    var pricesByShop = new List<PriceByShop>();

    // some code here to add an object to the list for each shop
    // initialize Price with existing price or set to 0...

    return View( pricesByShop );
}
@model List<PriceByShop>

@for( int i = 0; i < Model.Count; i++ )
{
    @Model[i].ShopName

    <div class="form-group">
        @Html.LabelFor( model => model[i].Price, "Cena" )
        <div class="col-md-10">
            @Html.EditorFor( model => model[i].Price )
        </div>
    </div>
}