以下this MVC 4系列教程我自己嘗試了一些東西。 我開始試圖讓searchfilter url友好。下面的代碼是我使用的那一刻是什麼:MVC - 查詢字符串路由
的Global.asax
public static void RegisterRoutes(RouteCollection routes)
{
routes.MapRoute(
name: "MovieSearch",
url: "Movies/SearchIndex/{movieGenre}/{searchString}",
defaults: new { controller = "Movies", action = "SearchIndex", movieGenre = UrlParameter.Optional, searchString = UrlParameter.Optional }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
protected void Application_Start()
{
RegisterRoutes(RouteTable.Routes);
}
SearchIndex.cshtml
<p>
@Html.ActionLink("Create New", "Create")
@using (Html.BeginForm("SearchIndex", "Movies", FormMethod.Get))
{
<p> Genre: @Html.DropDownList("movieGenre", "All")
Title: @Html.TextBox("searchString")<br />
<input type="submit" value="Filter" /></p>
}
</p>
MoviesController.cs
//
// GET: /Movies/SearchIndex/Comedy/Sherlock
public ActionResult SearchIndex(string movieGenre, string searchString)
{
var GenreList = new List<string>();
var GenreQry = from d in db.Movies
orderby d.Genre
select d.Genre;
GenreList.AddRange(GenreQry.Distinct());
ViewBag.movieGenre = new SelectList(GenreList);
var movies = from m in db.Movies
select m;
if (!string.IsNullOrEmpty(searchString))
{
movies = movies.Where(s => s.Title.Contains(searchString));
}
if (string.IsNullOrEmpty(movieGenre))
{
return View(movies);
}
else
{
return View(movies.Where(m => m.Genre == movieGenre));
}
}
現在一切都順利的時候,我把下列網址在我adressbar:/電影/ SearchIndex /喜劇/福爾摩斯
但是,當我在SearchIndex.cshtml我得到以下網址的「過濾器」按鈕篩選:/Movies/SearchIndex?movieGenre = Comedy & searchString = Sherlock
任何人都知道這裏的問題?
你打敗了我約4秒。 301是一個很好的解決方法;對於一個不同的項目,我一直在試圖找到一個允許客戶端路由生成的JavaScript解決方案,但到目前爲止我一直不太走運(crossroads.js等人專注於客戶端路由解析)。有什麼想法嗎? – ehdv 2012-03-15 13:40:33
@Keith你有關於這個的教程? – Julian 2012-03-15 14:01:23
@Julian抱歉,目前還沒有,但有很多參考資料。 – Keith 2012-03-15 22:16:50