C# 作为视图中模型的属性从列表中添加/删除项

C# 作为视图中模型的属性从列表中添加/删除项,c#,asp.net-mvc,asp.net-mvc-2,C#,Asp.net Mvc,Asp.net Mvc 2,我使用的是这里找到的指南,我使用的是MVC2 我已经让它与控制器方法一起工作,如下所示: [HttpPost] public ActionResult CreateStockRequest(StockRequestModel viewModel, List<StockRequestModel.StockRequestItem> items) { viewModel.Items = items; // Validate the request and submit i

我使用的是这里找到的指南,我使用的是MVC2

我已经让它与控制器方法一起工作,如下所示:

[HttpPost]
public ActionResult CreateStockRequest(StockRequestModel viewModel, List<StockRequestModel.StockRequestItem> items)
{
    viewModel.Items = items;

    // Validate the request and submit it
    return View(viewModel);
}
局部视图

m、 项目,,
无效的
Action(“Products”,“Data”,new{area=(string)null}),
型号.项目,
2)%>
m、 数量)%>

为什么不使用视图模型

public class StockRequestModel 
{
    public List<StockRequestItem> Items { get; set; }

    ... some other properties
}
在你看来:

<div class="editorRow">
    <% using(Html.BeginCollectionItem("Items")) { %>
        ...
    <% } %>
</div>

...

这是一个很难实现的目标,但也许这就是问题所在:

Html.RenderPartial("StockRequestItemEditor", item);
在POST操作中检查viewModel时,我注意到它在集合中的项数是正确的,但它们都是空的。这对我来说是一个模型绑定器的前缀问题。因此,也许类似的方法会奏效:

var dictPrefix = new ViewDataDictionary();
dictPrefix.TemplateInfo.HtmlFieldPrefix = "SomePrefix";

Html.RenderPartial("StockRequestItemEditor", item, dictPrefix);
我不认为
RenderPartial()
在不使用此重载的情况下传递前缀(尽管可能是错误的)。我不完全确定绑定前缀是如何工作的,所以我不知道它的名字是什么,但它似乎与此相关。收藏中的物品数量对我来说绝对正确,但没有一件是正确绑定的


希望这足以促使其他人给你正确的答案。

使用视图和局部视图更新“SomePrefix”可能类似于
“Items[“+i+”]”“
。我不确定如何使用此信息。我的理解是,
BeginCollectionItem
方法基本上就是这样做的(仅使用GUID作为索引,以便允许添加/删除内容)。
<div class="editorRow">
    <% using(Html.BeginCollectionItem("Items")) { %>
        ...
    <% } %>
</div>
Html.RenderPartial("StockRequestItemEditor", item);
var dictPrefix = new ViewDataDictionary();
dictPrefix.TemplateInfo.HtmlFieldPrefix = "SomePrefix";

Html.RenderPartial("StockRequestItemEditor", item, dictPrefix);