簡體   English   中英

在asp.net mvc 5 GET上的路由問題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM