我讓自己完全困惑,如果有人能夠再次指向正確的方向,我將不勝感激。在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);
}
}
非常感謝 - 完美的作品。有時我覺得事情比他們更復雜 - 我真的喜歡MVC/Linq,並且只是抓住了表面!乾杯,馬克 – Mark 2012-08-07 12:25:14