如何在 MVC 中使用自定义路由进行自定义 URL

how to make custom URL with custom routing in MVC

我在 mvc 中自定义 url 时遇到问题。我想让 url 像这样:

http://www.domainname.com/directory/bysearch/value1/value2

但它是这样的

http://www.domainname.com/directory/bysearch?txtaddress=value1&searchString=value2

RouteConfig.cs代码

routes.MapRoute(
           name: "Directory",
           url: "Directory/{qualifier}/{v1}/{v2}/{v3}/{v4}/{v5}/{v6}/{v7}/{v8}",
           defaults: new
           {
               controller = "Directory",
               action = "index",
               qualifier = UrlParameter.Optional,
               v1 = UrlParameter.Optional,
               v2 = UrlParameter.Optional,
               v3 = UrlParameter.Optional,
               v4 = UrlParameter.Optional,
               v5 = UrlParameter.Optional,
               v6 = UrlParameter.Optional,
               v7 = UrlParameter.Optional,
               v8 = UrlParameter.Optional
           });
routes.MapRoute(
    name: "DirectorySerach",
    url: "Directory/bysearch/{v1}/{v2}",
    defaults: new
    {
        controller = "Directory",
        action = "Search",
        v1 = UrlParameter.Optional,
        v2 = UrlParameter.Optional
    });

控制器

public ActionResult Index(string qualifier, string v1, string v2, string v3, string v4, string v5, string v6, string searchString, int page = 1)
    {
       // code logic here
       return View();
    }
public ActionResult Search(string v1 = null,string v2 = null)
{
   //code logic here
    return View();
}

查看

@using (Html.BeginForm("search","Directory", FormMethod.Get))
{
    <div class="form-group">
        <div class="c-checkbox">
            <input id="chkOnline" name="chkOnline" class="c-check" type="checkbox">
            <label for="chkOnline" class="c-font-thin c-font-17">
                <span></span>
                <span class="box"></span> Online
                <span class="check"></span>
            </label>
        </div>
    </div>
    <div class="form-group">
       @Html.TextBox("txtaddress", null, new { @class = "form-control c-square c-theme input-lg", @placeholder = "Address OR ZIP/Postal Code OR City" })
    </div>
    <div class="input-group input-group-lg c-square">
        @Html.TextBox("searchString", null, new { @class = "form-control c-square c-theme input-lg", @placeholder = "Enter Keyword" })
        <span class="input-group-btn">
            <button class="btn c-theme-btn c-btn-square c-btn-uppercase c-font-bold" type="submit">Go!</button>
        </span>
    </div>
}

请help/guide我,我哪里错了或者有什么问题。以及如何解决。 感谢您宝贵的时间和精力。提前致谢。

如果你想清理 URl 那么你需要手动创建 URl,因为表单提交总是会创建查询字符串。

因此请删除您的表单并将按钮替换为 hyperlink。并在 link.

上编写点击事件
@Html.TextBox("v1", null, new {  })
@Html.TextBox("v2", null, new {  })
<a href="javascript:void(0)" id="btnSearch" class="btn btn-primary">GO</a>

现在编写一个函数来创建 URl

<script src="~/Scripts/jquery-1.10.2.min.js"></script>
<script>
$(document).ready(function(){
    $('#btnSearch').on('click',function(){
    var baseUrl = '@Url.Action("Search", "Directory")'; 
    var gettext1= $('#v1').val();
      var gettext2= $('#v2').val();
       if(gettext1){
        baseUrl  += '/'+gettext1;
       }else{
        baseUrl  += "/0";
      }
      if(gettext2){
        baseUrl  +="/"+ gettext2;
       }else{
        baseUrl  += "/0";
      }
    location.href=baseUrl;
    });
});
</script>

这里需要处理0。好像用户没有在文本框中输入任何内容然后我传递 0.