gpt4 book ai didi

c# - Razor DropDownList 如何获取漂亮的 URL

转载 作者:行者123 更新时间:2023-11-30 17:06:11 27 4
gpt4 key购买 nike

我希望在下面的示例代码中提交到 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
);

在我的 Controller 中,我将添加到 ViewBag (更愿意使用 ViewModel,但它已经与 IPagedList 一起使用)

var categories = Session.QueryOver<Category>()
.OrderBy(c=>c.CategoryName).Asc
.List();
ViewBag.CategoryList = new SelectList(categories, "CategoryName", "CategoryName");

我意识到使用 CategoryName 作为下拉列表中的 id 和标签有点……奇怪,但我使用 GUID 作为 ID,这会产生一个糟糕的 URL。这是唯一能够“破解”URL 有效的情况,即我很高兴用户可以根据需要在 URL 中键入要过滤的类别,而不是在下拉列表中查找

最佳答案

我怀疑如果不在 Javascript 中捕获表单提交、抑制默认操作、提取信息、构建新的操作字符串并将表单提交到新的操作字符串,您是否能够做您想做的事情。

问题是您提交的是表单值,而不是路由部分 - 表单中的 ID 与路由部分中的 ID 完全不同。当您使用 FormMethod.Get 时,表单变量将始终作为 GET 或查询字符串发送到服务器。

重要的是要注意,控制表单值如何提交的是浏览器,而不是服务器端 MVC 代码。

关于c# - Razor DropDownList 如何获取漂亮的 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15685296/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com