我希望在下面的示例代码中提交到 GET /Product/Category/Id
,其中 Id 值是选定的下拉列表 id。但相反,我得到了/Product/Category?Id=Id
,虽然它工作得很好,但看起来不像一个好的 URL
@using (Html.BeginForm("Category", "Product", FormMethod.Get))
{
<div class="category-search">
<label for="CategoryList">Filter by Category</label>
@Html.DropDownList("Id", (IEnumerable<SelectListItem>)ViewBag.CategoryList)
<input type="submit" value="Filter" />
</div>
}
我需要做些什么来保留漂亮的 URL
编辑
我的 Global.asax.cs 仅映射了以下路线
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional }
// Parameter defaults
);
在我的控制器中,我添加到 ViewBag (更喜欢使用 ViewModel,但它已经与 IPagedList 一起使用)
var categories = Session.QueryOver<Category>()
.OrderBy(c=>c.CategoryName).Asc
.List();
ViewBag.CategoryList = new SelectList(categories, "CategoryName", "CategoryName");
CategoryName
我意识到在下拉列表中使用 id 和标签有点奇怪,但我使用的是 ID 的 GUID,这使得 URL 很糟糕。这是能够“破解” URL 有效的唯一情况,即我很高兴用户可以根据需要在 URL 中键入要过滤的类别,而不是在下拉列表中查找它