在ASP.Net中将值列表放入视图模型中MVC

问题描述:

我让自己完全困惑,如果有人能够再次指向正确的方向,我将不胜感激。在ASP.Net中将值列表放入视图模型中MVC

我试图将一个搜索表单添加到一个虚构的项目中,用于我自己的学习目的。

想法是 - 我有一个日期文本框,以及多少天租用文本框 - 当搜索时 - 代码应该查找所有已输入日期之间已预订的汽车,以及日期加上号码所需的天数。 (A)

这将产生汽车,其必须被从搜索(B)的下一部分

然后查找汽车(C),和排除的列表中不包含在(B生成的列表)

Linq然后填充ct对象(D)freeCarTypes。

freeCarTypes在这一点上,正确保存我要寻找的数据 - 的列表:

Car Type (TypeNme) 
Type ID 
TypeCount (how many of this car type are available) 
NumSelected (set to 0 by default) 

NumSelected(我希望)将在模型中填充,当我列出每个车型,并带有TypeCount(可用)的下拉列表 - 然后将填充模型的NumSelected部分。所以当帖子发生时,我有一个车型列表,以及经销商感兴趣的每种类型的号码。

我的问题是,我如何获得汽车列表 - freeCarTypes(D) - 进入我的SearchViewModel.TypesAvail?

它是我的SearchViewModel使用IQueryable这是错误的,或者我应该在这里使用别的东西 - 我会绕圈。

感谢您的帮助,

马克

public class SearchViewModel 
{ 
    [Required] 
    public DateTime From { get; set; } 
    [Required] 
    public int Days { get; set; } 
    public long DealerID { get; set; } 
    public IQueryable<Car> Cars { get; set; } 
    public IQueryable<TypesAvail> TypesAvails { get; set; } 
} 

    public class TypesAvail 
{ 
     public String TypeNme { get; set; } 
     public long TypeID { get; set; } 
     public int TypeCount { get; set; } 
     public int NumSelected { get; set; } 
} 

我SearchController

[HttpPost] 
    public ActionResult Avail(SearchViewModel model, string id) 
    { 
     if (ModelState.IsValid) 
     { 

      // (A) 
      var dteFrom = model.From; 
      var dteTo = model.From.AddDays(model.Nights); 

      // (B) 
      var prebookedCars = db.Cars 
       .Where(car => car.Rentals.Any(rental => 
        (model.DealerID == rental.Dealer_id) && (
        (dteFrom >= rental.dateout && dteFrom < rental.dateback) 
        || 
        (dteTo > rental.dateout && dteTo <= rental.dateback) 
        || 
        (dteFrom <= rental.dateout && dteTo >= rental.dateback) 
       ))); 


       // (C) 
      var freeCarTypes = db.Cars 
       .Where(r => r.DealerID == model.DealerID) 
       .Except(prebookedCars) 
       .GroupBy(p => p.CarType) 
       .Select(ct => new      // (D) 
       { 
        TypeNme = ct.Key.type_name,  
        TypeID = ct.Key.type_id, 
        TypeCount = ct.Count(), 
        NumSelected = 0 
       } 
       ); 

      foreach (var fr in freeCarTypes) 
      { 
       TypesAvail ta = new TypesAvail(); 
       { 
       ta.NumSelected = fr.NumSelected; 
       ta.TypeCount = fr.TypeCount; 
       ta.TypeID = fr.TypeID; 
       ta.TypeNme = fr.TypeNme; 
       } 

      } 

      // This is where I'm stuck - how do I get the list above, into the ViewModel, to I can generate a list of car types, with a drop down list of how many are available 

      // model.TypesAvail = ta; 
      // model.TypesAvail = freeCarTypes; 

      return View(model); 
     } 
     else // model is not valid, so return the View 
     { 
      return View(model); 
     } 
    } 

这个怎么样?

// (C)  
model.TypesAvail = db.Cars.Where(r => r.DealerID == model.DealerID) 
         .Except(prebookedCars) 
         .GroupBy(p => p.CarType) 
         .Select(ct => new TypesAvail     // (D) 
         {      
          TypeNme = ct.Key.type_name, 
          TypeID = ct.Key.type_id, 
          TypeCount = ct.Count(), 
          NumSelected = 0     
         }; 
+0

非常感谢 - 完美的作品。有时我觉得事情比他们更复杂 - 我真的喜欢MVC/Linq,并且只是抓住了表面!干杯,马克 – Mark 2012-08-07 12:25:14