【问题标题】:Trouble populating selectlist in controller code - C# MVC在控制器代码中填充选择列表时遇到问题 - C# MVC
【发布时间】:2014-02-25 14:21:05
【问题描述】:

我有一个相当直接的要求 - 填充一个视图模型,它有一个 SelectList 作为其属性之一 - NewOccs 在模型上定义为:

   public class RatesList
   {
    [Key]
    public long TypeID { get; set; }
    public string TypeName { get; set; }
    public int TypeCount { get; set; }
    public IEnumerable<SelectListItem> NewOccs { get; set; }
   }

我要填充它的控制器代码是:

   var rooms = dbt.Rooms.Where(r => r.hotel_id == AccID)
               .GroupBy(p => p.RoomTypes).Select(g => new RatesList
                {
                    TypeName = g.Key.type_name,
                    TypeCount = g.Count(),
                    NewOccs = dbt.Rates.Where(rt => rt.type_id == g.Key.type_id).GroupBy(rt => rt.occ).AsEnumerable()
                       .Select(proj => new SelectListItem
                       {
                           Text = proj.Key,
                           Value =proj.Key
                       })

                }).ToList();

它应该从中获取信息的 Rates 表是:

public class Rates
{
    public int id { get; set; }
    public long type_id { get; set; }
    public DateTime ratedate { get; set; }
    public decimal rate { get; set; }
    public string occ { get; set; }
}

当我填充 SelectList 时,如何访问我的 Rates 表中的任何其他字段?例如,在 VSExpressIDE 中智能感知只允许我输入 proj.Key - 其他属性不存在。我希望 occ 成为键/值,我希望文本是 occrate 的串联 - 即:

Text = proj.occ + ' ' + rate.ToString() 

...但是在智能感知中找不到rateocc

谢谢你,马克

【问题讨论】:

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


    【解决方案1】:

    如果您单步调试调试器,您会看到GroupBy() 提供了一个GroupedEnumerable,其中包含密钥。键是Lookup&lt;string, Rates&gt;,因为您在字符串上使用了 GroupBy。

    如果您将 Select 更改为 SelectMany,您会看到所有费率。但这会破坏 GroupBy 的目的。我不完全确定你到底想要什么,但here 是 GroupBy 的一个很好的指南

    【讨论】:

      【解决方案2】:

      像这样:

      public class Client
      {
          public int SelectedSexId { get; set; }
          public IList<Sex> SexList { get; set; }
          public IList<SelectListItem> SexListSelectListItems
          {
              get
              {
                  SexList=SexList??new List<Sex>();
                  var list = (from item in SexList
                              select new SelectListItem()
                              {
                                  Text = item.Name,
                                  Value = item.Id.ToString(CultureInfo.InvariantCulture)
                              }).ToList();
                  return list;
              }
              set { }
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-04
        • 2015-08-02
        • 2019-04-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多