如何在MVC中使用自定义路由制作自定义URL

时间:2016-03-14 08:15:47

标签: asp.net-mvc routing asp.net-mvc-routing

我在mvc中制作自定义网址时遇到问题。我想像这样制作网址:

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>
}

请帮助/指导我,我错了或有什么问题。以及如何解决。 我很感激你的价值时间和精力。提前谢谢。

1 个答案:

答案 0 :(得分:1)

如果你想制作干净的URl,那么你需要手动创建URl,因为Form Submit将始终创建查询字符串。

所以删除你的表单并用超链接替换按钮。并在链接上写下点击事件。

@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。