How to URL encode parameters in ASP .NET MVC

前端 未结 3 1093
星月不相逢
星月不相逢 2020-12-04 01:52

I have the following code in my view:

<%= Html.ActionLink(
           \"View item\", 
           \"Index\", 
            \"Items\", 
            new 
             


        
相关标签:
3条回答
  • 2020-12-04 02:10

    I'm assuming you have a route setup and your url looks something like this:

    http://localhost/Items/Index/name%25with%25percent - (this will blow up)

    as opposed to this:

    http://localhost/Items/Index/?itemName=name%25with%25percent - (query string is ok)

    So an option would be to remove the "itemName" property from your route (in your RouteCollection) so that Html.ActionLink will render the Url using itemName as a QueryString parameter.

    As @Priyank says, the problem is because the itemName is part of the Url (not a QueryString parameter) and it contain illegal characters.

    0 讨论(0)
  • 2020-12-04 02:20

    Since these routedvalues are posted as part of URL string, they will be treated as separate values, separated by # and %. There are couple options for handle your case.

    You will have to implement your custom ValueProvider (IValueProvider and especially RouteDataValueProvider) to handle your custom need. One programmer had an issue with character '/' and he hacked it here http://mrpmorris.blogspot.com/2012/08/asp-mvc-encoding-route-values.html

    Second is to store values in TempData which persists across two request and use them.

    Hope this helps to think in right direction.

    0 讨论(0)
  • 2020-12-04 02:36

    You should be able to just use the UrlHelper instance of your view to do this for you. Try giving this a shot:

    <%= Html.ActionLink( "View item", "Index", "Items", new { itemName = Url.Encode(Model.ItemName) }, null) %>

    Update

    After testing, it seems explicitly encoding like I did above seems to be less accurate and will cause the server to double-encode (eg - % will come out as %2525 in the url).

    0 讨论(0)
提交回复
热议问题