[英]Routing Issue on asp.net mvc 5 GET
我正在嘗試使我的產品搜索URL看起來像“產品/搜索/ {此處搜索字詞}”。
我正在使用基於屬性的路由,我的控制器操作如下所示:
[HttpGet]
[Route("Products/Search/{searchTerm?}", Name="ProductSearch")]
public ActionResult Search(string searchTerm = "")
{
return View();
}
我曾嘗試將HTML Helper用於BeginForm和BeginRouteForm(如下所示),但都沒有運氣。 正在調用正確的操作,但是我的URL看起來像“ Products / Search?searchTerm”
BeginRouteForm
@using (Html.BeginRouteForm("ProductSearch", new { searchTerm = "" }, FormMethod.Get, new { Class = "navbar-form navbar-right", role = "search" }))
{
<div class="form-group">
@Html.TextBox("searchTerm", null, new { Class = "form-control", placeholder = "Item # or Name" })
</div>
<button type="submit" class="btn btn-default">Search</button>
}
BeginForm
@using (Html.BeginForm("Search", "Products", new { searchTerm = "" }, FormMethod.Get, new { Class = "navbar-form navbar-right", role = "search" }))
{
<div class="form-group">
@Html.TextBox("searchTerm", null, new { Class = "form-control", placeholder = "Item # or Name" })
</div>
<button type="submit" class="btn btn-default">Search</button>
}
我已經進行了調試,並選擇了正確的路線,URL只是沒有顯示我想要的方式。 我想念什么?
這是我建議的解決方案-
您具有以下控制器操作-
[HttpGet]
public ActionResult Search(string searchTerm = "")
{
return View();
}
讓視圖成為-
<script src="~/Scripts/jquery-1.10.2.min.js"></script>
<script>
$(function () {
$('#click').click(function (e) {
var name = $("#search").val();
var url = '@Url.Action("Search", "Action")' + '/' + name;
window.location.href = url;
});
});
</script>
<input type="text" name="searchText" id="search"/>
<input type="button" value="click" id="click"/>
當您點擊按鈕時-
不要忘記將正確的路由添加到路由配置中-
routes.MapRoute(
name: "searchaction",
url: "{controller}/{action}/{searchTerm}",
defaults: new { controller = "Action", action = "Search" }
);
我認為BeginRouteForm不會像您期望的那樣工作。 根據文檔 ,該方法所做的只是使用提供的參數插入<form>
。 如果您為路由值提供的字符串不是空字符串,例如new { searchTerm = "somesearchterm" }
,那么您會在網址中看到它是“ / product / search / somesearchterm”。 但是,到現在為止,將正常處理表單,將搜索項作為普通查詢參數放在Url上。
您認為您遇到的問題不是由於ASP.Net MVC引起的。 所有使用GET方法的HTML表單都會將所有輸入元素轉換為QueryString參數。 這只是W3C標准 。
如果您希望此操作有效,則必須編寫jQuery以在提交表單之前引發事件,從輸入中獲取文本值,並將其臨時存儲,清空輸入框,然后通過添加臨時值來更新操作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.