如何在MVC路由中删除%26和%3D

时间:2017-04-29 18:37:14

标签: asp.net-mvc sorting

我有一个MVC网站项目。 我在控制器actionresult中有一个搜索类

public ActionResult Index(SearchModel search, int? pageNumber, string sortOrder)

public int? Year {get;set;}
        public String[] Status {get;set;}
        public DateTime? Start {get;set;}
        public DateTime? End {get;set;}

使用操作链接在我的视图中对表执行排序我得到了符号 %26和%3D

我执行此代码

@Html.ActionLink("year", "Index", new
                                       {
                                           sortOrder = ViewBag.Year,
                                           Year = Request.QueryString["year"],
                                           Status = string.Join("&Status=", statusSelected.Select(x => x)),
                                           start=  Request.QueryString["start"],
                                           end=  Request.QueryString["end"]
                                       },
                                         new { title = "sort by year" })

我该如何解决

THKS

2 个答案:

答案 0 :(得分:0)

似乎标准参数绑定无法在默认RouteValueDictionary上正确应用,因为您在这种情况下手动生成查询字符串,如下所示: -

string.Join("&Status=", statusSelected.Select(x => x))

我相信您已经知道默认情况下会对URL字符串进行编码,因此Status - “&”中的字符会被编码和“=”分别编码为“%26”和“%3D”。

因此,替代方法之一是将SearchModel.cs的{​​{1}}更改为接受Status而不是String并手动转换回字符串数组: -

Status = string.Join(",", statusSelected.Select(x => x))
var statusList = HttpUtility.UrlDecode(search.Status).Split(',');

我承认这是一个快速&脏的解决方案,因为它是最简单的解决方法,而不使用自定义数据绑定器。

答案 1 :(得分:0)

我解决了这个问题

<a href="@(Url.Action("Index", "Home", new { year=ViewBag.Year....})

+(string.Join(“&amp; status =”,statusSelected.Select(x =&gt; Url.Encode(x.tostring()))“&gt; year

简而言之,我连接了网址

它可以工作,但pheraps很脏 我用手写的代码,可能是错的 我希望能帮助别人