以前の投稿に続く:DateTimeテンプレートを使用した検索フォームの追加
また、ここで検索の例に従ってみました:http ://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/sorting-filtering-and-paging-with-the-entity-framework -in-an-asp-net-mvc-application
...しかし、それは私の以前の投稿への回答で示唆されているようにViewModelを利用していません。
私は、次のViewModelに基づいて、2つの日付(from / to)をとるfromの検索を支援しようとしています。
public class SearchViewModel
{
[Required]
public DateTime From { get; set; }
[Required]
public DateTime To { get; set; }
}
私のViews/Search/Index.cshtmlは次のとおりです。
@model ttp.Models.SearchViewModel
@{
ViewBag.Title = "Search Availability";
}
<h2>Search Availability</h2>
@using (Html.BeginForm())
{
<div class="row">
<div class="span2">@Html.LabelFor(x => x.From)</div>
<div class="span2">@Html.EditorFor(x => x.From)</div>
<div class="span2">@Html.ValidationMessageFor(x => x.From)</div>
</div>
<div class="row">
<div class="span2">@Html.LabelFor(x => x.To)</div>
<div class="span2">@Html.EditorFor(x => x.To)</div>
<div class="span2">@Html.ValidationMessageFor(x => x.To)</div>
</div>
<div class="row">
<div class="span2 offset2"><button type="submit">Search</button></div>
</div>
}
Get:/ Search/Indexコントローラーは次のとおりです。
//
// GET: /Search/
public ActionResult Index()
{
SearchViewModel svm = new SearchViewModel();
svm.From = DateTime.Today;
svm.To = DateTime.Today;
return View(svm);
}
これまでのところ良好です-私のビューには、日付がデフォルトで今日になっているテキストボックスが表示されます(DateTimeヘルパーを使用)。[検索]をクリックすると、コードはSearchControllerに移動します//投稿:/次のように検索します:
//
// Post: /Search/
[HttpPost]
public ActionResult Index(SearchViewModel searchViewModel)
{
if (!ModelState.IsValid)
{
// Not valid, so just return the search boxes again
return View(searchViewModel);
}
// Get the From/To of the searchViewModel
DateTime dteFrom = searchViewModel.From;
DateTime dteto = searchViewModel.To;
// Query the database using the posted from/to dates
IQueryable<Room> rooms = db.Rooms.Where(r => r.Clients.Any(c => c.Departure >= dteFrom && c.Departure < dteTo));
// This is where I'm unsure
ViewBag.Rooms = rooms.ToList();
return View(rooms.ToList());
}
現時点でわからないのは、Postコントローラーの最後の数行(IQueryableルームの部屋のリストを返す方法)と画面に部屋のリストを表示する方法です。別のビューにリダイレクトしますか(その場合、部屋のリストをそのビューに渡すにはどうすればよいですか)?上記のコードを実行しようとすると、次のエラーが発生します。
The model item passed into the dictionary is of type 'System.Collections.Generic.List`1[ttp.Models.Room]', but this dictionary requires a model item of type 'ttp.Models.SearchViewModel'.
リンゴとナシを混ぜようとしていますか?とにかく、From and To検索ボックス(ViewModel)の下に部屋のリストを表示する方法はありますか?
ありがとうございました、
マーク