简体   繁体   English

SelectListItem未设置所选值

[英]SelectListItem not setting selected value

I have these classes. 我有这些课。

public class Store {
  // constructor
  public int Id { get; set; }
  public string Name { get; set; }

  public virtual ICollection<Stock> Stocks { get; set; }
}

public class Stock {
  public int Id { get; set; }
  public int StoreId { get; set; }
  public int ProductId { get; set; }

  public virtual Store Store { get; set; }
  public virtual Product Product { get; set; }
}

public class Product {
  // constructor
  public int Id { get; set; }
  public string Name { get; set; }

  public ICollection<Stock> Stocks { get; set; }
}

public class Order {
  // constructor
  public int Id { get; set; }

  public virtual ICollection<OrderItem> OrderItems { get; set; }
}

public class OrderItem {
  public int Id { get; set; }

  public ICollection<Store> Stores { get; set; }
  public Item Item { get; set; }
  public Order Order { get; set; }
}

Fluid api: 流体API:

public class OrderItemMap : EntityTypeConfiguration<OrderItem> {
  public OrderItemMap() {
    HasMany(i => i.Stores)
      .WithMany()
      .Map(m => {
          m.MapLeftKey("OrderItemId");
          m.MapRightKey("StoreId");
          m.ToTable("FromStore");
        });
  }
}

Now, for instance I have created an order and set my details and also the item's store as to where they should get the item to deliver it. 现在,例如,我创建了一个订单,并设置了我的详细信息以及商品的商店 ,以了解他们应从何处获取该商品以进行交付。 Note: An item can have many stores . 注意:一个项目可以有许多商店

My problem is.. If the user wants to Edit the order. 我的问题是..如果用户要编辑订单。 I don't know how to display the list of stores as dropdown and it's selected value. 我不知道如何将商店列表显示为下拉菜单及其选择的值。

Here's what I have done so far: 到目前为止,这是我所做的:

var order = _db.Orders.Find(orderId);
var orderVm = new EditOrderVm {
  OrderId = order.Id,
  OrderItems = order
               .OrderItems
               .Select(o => new EditOrderItemVm {
                 OrderItemId = o.Id,
                 OrderId = o.OrderId,
                 ProductId = o.ProductId,
                 Stores = (from sc in o.Product.Stocks
                           from st in o.Stores.DefaultIfEmpty()
                           select new {
                             Id = sc.Store.Id,
                             Name = sc.Store.Name
                           }).ToSelectList(s => s.Name, s => s.Id, s => true)
               })
}

My VM: 我的虚拟机:

public class EditOrderItemVm {
  // removed some for brevity
  public IEnumerable<SelectListItem> Storses { get; set; }
}

My helper (ain't mine) 我的助手(不是我的)

public static IEnumerable<SelectListItem> ToSelectList<T, TTextProperty, TValueProperty>(this IEnumerable<T> instance, Func<T, TTextProperty> text, Func<T, TValueProperty> value, Func<T, bool> selectedItem = null)
        {
            return instance.Select(t => new SelectListItem
            {
                Text = Convert.ToString(text(t)),
                Value = Convert.ToString(value(t)),
                Selected = selectedItem != null && selectedItem(t)
            });
        }

My View: 我的观点:

@Model.OrderNumber
@foreach(var item in Model.OrderItems) {

    @Html.DropDownListFor(model => item.StoreId, item.Stores, "Select store")
    @Html.ValidationMessageFor(model => item.StoreId)
}

With the query above, I can populate the dropdown with the list of stores as to where the product is stored but i don't know how to set of what was selected during creation of order. 通过上面的查询,我可以在下拉列表中填充有关产品存储位置的商店列表,但是我不知道如何设置在创建订单时选择的商品。

It would be great if I can populate the dropdown with the list of stores as to where the item is stored and also set it's selected value. 如果可以在下拉列表中填充有关项目存储位置的商店列表,并设置其选定值,那就太好了。

This line should look like this, You have to take all your stores from db and select those who are involved in current order. 该行应如下所示:您必须从db中获取所有商店 ,然后选择当前订单中涉及的商店

var order = _db.Orders.Find(orderId);
var stores = _db.Stores; // take all stores from DB
var orderVm = new EditOrderVm {
  OrderId = order.Id,
  OrderItems = order
               .OrderItems
               .Select(o => new EditOrderItemVm {
                 OrderItemId = o.Id,
                 OrderId = o.OrderId,
                 ProductId = o.ProductId,
                 Stores = (from st in stores // all stores
                           select new {
                             Id = st.Id,
                             Name = st.Name
                        }).ToSelectList(
                            s => s.Name,
                            s => s.Id, 
                            s => o.Stores.Any(sto => sto.Id == s.Id) //select only existing stores
                        )

               })
}

您必须像s => s.Id == YOUR_CURRENT_STORE_Id一样来代替s => true

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 从SelectListItem获取选定的值 - Get selected value from SelectListItem 无法获取SelectListItem \\ DropDown对于选定的值 - Unable to get SelectListItem \ DropDownFor selected Value 使用SelectListItem设置DropDownList的选定值 - Set the selected value for a DropDownList using SelectListItem 奇怪的DropDownListFor / SelectListItem问题未设置默认值 - Weird DropDownListFor / SelectListItem issue not setting default value C#如何在LINQ查询中访问SelectListItem的Selected属性的值? - C# How to access value of Selected property of SelectListItem in LINQ query? ASP.NET MVC:所选值不适用于列表<selectlistitem></selectlistitem> - ASP.NET MVC : selected value not working on a List<SelectListItem> Html.DropDownList选择的值不起作用(使用带有IEnumerable的构造函数) <SelectListItem> ) - Html.DropDownList Selected Value Not Working (Using Constructor with IEnumerable<SelectListItem>) 列表<SelectListItem>未显示 @Html.DropDownListFor 的选定值 - List<SelectListItem> Selected Value Not Showing for @Html.DropDownListFor 将Kendo dropdownlistfor的默认值设置为“ Selected = true” SelectListItem - Set default value of Kendo dropdownlistfor to 'Selected = true' SelectListItem 如何更新SelectListItem列表中的选定值<T> - How to update SelectListItem Selected value inside a List<T>
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM