asp.net mvc 中多行数据的 Selectlist 绑定
Selectlist binding for multiple rows of data in asp.net mvc
我有一个对象列表的问题:
List<MenuProduct> MenuProducts;
其中 MenuProduct
包括:
public class MenuProduct
{
public int MenuProductID { get; set; }
public int LoginID { get; set; }
public int ContractTypeID { get; set; }
public int? ContractID { get; set; }
public string Title { get; set; }
public decimal? Factor { get; set; }
public int OrderNum { get; set; }
public System.DateTime DateCreated { get; set; }
public int UserCreated { get; set; }
public decimal DiscountedRate { get; set; }
public decimal? JointFactor { get; set; }
}
和(部分)模型:
public List<MenuProduct> MenuProducts { get; set; }
public SelectList ContractTypes { get; set; }
public SelectList Contracts { get; set; }
我在视图中绑定它们是这样的:
@for (int i = 0; i < Model.MenuProducts.Count(); i++)
{
<tr>
<td>@Html.TextBoxFor(x => x.MenuProducts[i].Title, new { @class = "form-control" })</td>
<td>@Html.TextBoxFor(x => x.MenuProducts[i].Factor, new { @class = "form-control" })</td>
<td>@Html.TextBoxFor(x => x.MenuProducts[i].JointFactor, new { @class = "form-control" })</td>
<td>@Html.DropDownListFor(x => x.MenuProducts[i].ContractTypeID, Model.ContractTypes, new { @class = "form-control" })</td>
<td>@Html.DropDownListFor(x => x.MenuProducts[i].ContractID, Model.Contracts, new { @class = "form-control" })</td>
</tr>
}
我遇到的问题是,当加载数据时,因为我使用的是合同和合同类型的共享列表,所以 SelectList 永远不会 select 使用正确的值。
如果我像这样将每个项目移动到局部视图:
@for (int i = 0; i < Model.MenuProducts.Count(); i++)
{
@Html.RenderPartial("_MenuProductItemPartialView", new MenuProductItemModel() { Item = Model.MenuProducts[i], ContractTypes = Model.ContractTypes, Contracts = Model.Contracts})
}
使用此模型:
public MenuProduct Item { get; set; }
public SelectList ContractTypes { get; set; }
public SelectList Contracts { get; set; }
select 列表中的值是正确的,但是我不能在外页上有一个按钮来一次更新所有行 - 至少,我不知道该怎么做那。
所以我的问题是:如何让 select 列表以第一种方式工作(我可以 post 支持 List<MenuProduct>
)或者我如何收集所有第二种方式来自每个部分的更新数据?因为任何一行或多行的数据都可能发生变化。
您可以使用您选择的值为每一行即时构建一个 SelectList
,它应该可以工作。
@Html.DropDownListFor(x => x.MenuProducts[i].ContractTypeID, new SelectList(Model.ContractTypes, "Value", "Text", Model.MenuProducts[i].ContractTypeID), new { @class = "form-control" })
我有一个对象列表的问题:
List<MenuProduct> MenuProducts;
其中 MenuProduct
包括:
public class MenuProduct
{
public int MenuProductID { get; set; }
public int LoginID { get; set; }
public int ContractTypeID { get; set; }
public int? ContractID { get; set; }
public string Title { get; set; }
public decimal? Factor { get; set; }
public int OrderNum { get; set; }
public System.DateTime DateCreated { get; set; }
public int UserCreated { get; set; }
public decimal DiscountedRate { get; set; }
public decimal? JointFactor { get; set; }
}
和(部分)模型:
public List<MenuProduct> MenuProducts { get; set; }
public SelectList ContractTypes { get; set; }
public SelectList Contracts { get; set; }
我在视图中绑定它们是这样的:
@for (int i = 0; i < Model.MenuProducts.Count(); i++)
{
<tr>
<td>@Html.TextBoxFor(x => x.MenuProducts[i].Title, new { @class = "form-control" })</td>
<td>@Html.TextBoxFor(x => x.MenuProducts[i].Factor, new { @class = "form-control" })</td>
<td>@Html.TextBoxFor(x => x.MenuProducts[i].JointFactor, new { @class = "form-control" })</td>
<td>@Html.DropDownListFor(x => x.MenuProducts[i].ContractTypeID, Model.ContractTypes, new { @class = "form-control" })</td>
<td>@Html.DropDownListFor(x => x.MenuProducts[i].ContractID, Model.Contracts, new { @class = "form-control" })</td>
</tr>
}
我遇到的问题是,当加载数据时,因为我使用的是合同和合同类型的共享列表,所以 SelectList 永远不会 select 使用正确的值。
如果我像这样将每个项目移动到局部视图:
@for (int i = 0; i < Model.MenuProducts.Count(); i++)
{
@Html.RenderPartial("_MenuProductItemPartialView", new MenuProductItemModel() { Item = Model.MenuProducts[i], ContractTypes = Model.ContractTypes, Contracts = Model.Contracts})
}
使用此模型:
public MenuProduct Item { get; set; }
public SelectList ContractTypes { get; set; }
public SelectList Contracts { get; set; }
select 列表中的值是正确的,但是我不能在外页上有一个按钮来一次更新所有行 - 至少,我不知道该怎么做那。
所以我的问题是:如何让 select 列表以第一种方式工作(我可以 post 支持 List<MenuProduct>
)或者我如何收集所有第二种方式来自每个部分的更新数据?因为任何一行或多行的数据都可能发生变化。
您可以使用您选择的值为每一行即时构建一个 SelectList
,它应该可以工作。
@Html.DropDownListFor(x => x.MenuProducts[i].ContractTypeID, new SelectList(Model.ContractTypes, "Value", "Text", Model.MenuProducts[i].ContractTypeID), new { @class = "form-control" })