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