【问题标题】:Selectlist binding for multiple rows of data in asp.net mvc [duplicate]asp.net mvc中多行数据的选择列表绑定[重复]
【发布时间】:2017-08-30 17:51:02
【问题描述】:

我有一个对象列表的问题:

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>
     }

我遇到的问题是,在加载数据时,因为我使用的是 Contracts 和 ContractTypes 的共享列表,所以永远不会使用正确的值选择 SelectLists。

如果我将每个项目移动到这样的局部视图:

@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; }

选择列表中的值是正确的,但是我不能在外部页面上有一个按钮来一次更新所有行 - 至少,我不知道该怎么做。

所以我的问题是:我如何让选择列表以第一种方式工作(我可以发回List&lt;MenuProduct&gt;)或者我如何从第二种方式收集每个部分的所有更新数据?因为可能有任何一行或多行的数据发生了变化。

【问题讨论】:

    标签: c# asp.net asp.net-mvc asp.net-mvc-4


    【解决方案1】:

    您可以使用您选择的值为每一行即时构造一个SelectList,它应该可以工作。

    @Html.DropDownListFor(x => x.MenuProducts[i].ContractTypeID, new SelectList(Model.ContractTypes, "Value", "Text", Model.MenuProducts[i].ContractTypeID), new { @class = "form-control" })
    

    【讨论】:

    • 虽然这个问题在技术上是重复的(我在搜索时没有找到那个),但您的回答是直接的,而且 IMO 更容易理解。
    猜你喜欢
    • 2018-10-04
    • 2011-10-23
    • 1970-01-01
    • 1970-01-01
    • 2014-07-18
    • 1970-01-01
    • 2011-10-13
    • 2015-04-04
    • 1970-01-01
    相关资源
    最近更新 更多