如何为具有属性路由的操作定义Html.BeginForm
本文关键字:操作 定义 Html BeginForm 路由 属性 | 更新日期: 2023-09-27 18:22:13
控制器
[HttpGet]
[Route("~/search/{clause}/{skip?}")]
public async Task<ActionResult> Search(string clause, int skip = 0)
{
...
}
查看
@using (Html.BeginForm("Index", "search", FormMethod.Get))
{
@Html.TextBox("clause", null, new { @class = "form-control col-md-4" })
...
}
渲染Html
<form action="/search" method="get">
<input id="clause" name="clause" type="text" value="test">
</form>
我使用[HttpGet]
的部分原因是我希望通过http://myapp.com/search/<search values>
访问搜索
当我导航到http://myapp.com/search/test
时,一切似乎都很好,但当我试图在文本框中输入新的搜索词并点击回车或提交时,它会导航到http://myapp.com/search?clause=newsearch
我应该怎么做才能使我的文本框导航到http://myapp.com/search/newsearch
?
您的表单生成http://myapp.com/search?clause=newsearch
,因为浏览器不知道您的路由(服务器上运行的c#代码)。
为了生成你喜欢的url(http://myapp.com/search/newsearch
),你需要javascript来拦截和取消默认提交,并构建一个导航到的url
$('form').submit(function() {
var baseUrl = $(this).attr('action'); // or var baseUrl = '@Url.Action("Index", "search")';
var url = baseUrl + '/' + $('clause').val(); // add value for skip if required
location.href = url; // redirect
return false; // cancel the default submit
});