gpt4 book ai didi

c# - ASP.NET MVC : Put searching attributes into url (not query string)

转载 作者:行者123 更新时间:2023-11-30 21:52:29 24 4
gpt4 key购买 nike

在我的 ASP.NET MVC 5 应用程序上实现了过滤。我的搜索框由几个具有预定义值的下拉列表组成。当 Dropdownlist 值发生变化时,将提交表单,我会看到特定方法的所有可用工单。

表单提交后,页面重新加载,我看到类似 mysite.com/?Method=car 的 url。但我想摆脱查询字符串并将 car 直接放入 url,即mysite.com/method/carmysite.com/method/plain

这可能吗?

搜索框

@using (Html.BeginForm("Search", "Transfer", FormMethod.Get))
{
<div class="form-horizontal">
<div class="form-group">
<div class="col-md-10">
@Html.DropDownListFor(model => model.Method, Model.Methods, new { @class = "query"})
</div>
</div>
</div>
<input type="submit" class="hidden" />
}

我的操作方法

[Route("~/transfer/{method?}")]
public async Task<ActionResult> List(string method)
{
//filter and displaying
return View(viewModel);
}

最佳答案

默认情况下,Html.BeginFormFormMethod.Get 会将所有表单值序列化为查询字符串。因此,如果您想要友好的 URL,则必须编写一些 JavaScript(本例中为 jQuery)。

首先你可以删除表单

<div class="form-horizontal">
<div class="form-group">
<div class="col-md-10">
@Html.DropDownListFor(model => model.Method, Model.Methods, new { @class = "query"})
</div>
</div>
</div>
<button type="button" id="submitMethodBtn">Submit</button>

<script>
var baseUrl = '@Url.Action("Search", "Transfer")/'
$('#submitMethodBtn').click(function(){
var url = baseUrl + $(#'@Html.IdFor(m=>m.Method)').val();
window.location.href = url;
})
</script>

一些问题/说明:

1如果您在浏览器中输入 mysite.com/method/car(假设问题 #2 已解决),它将带您采取正确的操作,因此您的问题基本上是在 View 中生成友好的 Url。

2 在提供的代码示例中,我使用了内联脚本。您可以将它提取到一个单独的静态文件中,但您必须对 Method 属性的 url 和 html id 进行硬编码。

3 您的操作方法获取 int 作为参数,那么您如何期望它与 mysite.com/method/car(car 是一个字符串)一起工作?

关于c# - ASP.NET MVC : Put searching attributes into url (not query string),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34717420/

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