2013-07-16 78 views
0

我有一個擴展方法,返回一個MvcHtmlString,我發現它是編碼的。在某些情況下,我正在查詢字符串參數的路線。我想要的結果看起來像這樣:List/View/28?category=0&sort=Default然而它正在渲染編碼的字符串:ListView/28%3fcategory%3d0%26sort%3dDefault無法Html.Decode一個編碼的MvcHtmlString

在我的C#和我的Razor代碼中,我試圖解碼它,但它沒有效果。還有什麼我可以嘗試嗎?

public static MvcHtmlString GenerateLanguageLink(this HtmlHelper html) 
     { 
      var routeDictionary = html.ViewContext.RouteData.Values; 

      var queryStringCollections = html.ViewContext.HttpContext.Request.QueryString; 
      var queryStringText = string.Empty; 
      if (queryStringCollections.Count > 0) 
      { 
       queryStringText = queryStringCollections.ToString(); 
       routeDictionary["Id"] = HttpUtility.HtmlDecode(routeDictionary["Id"] + string.Format("?{0}", queryStringText)); 
      } 

      return html.ActionLink(linkText, routeDictionary["action"].ToString(), routeDictionary["controller"].ToString(), routeDictionary, null); 
     } 

剃刀:

@Html.Raw(HttpUtility.HtmlDecode(@Html.GenerateLanguageLink().ToHtmlString())) 

回答

0

剛剛從下面

routeDictionary["Id"] = HttpUtility.HtmlDecode(routeDictionary["Id"] + string.Format("?{0}", queryStringText)); 

的代碼應該是刪除HttpUtility.HtmlDecode

routeDictionary["Id"] = (routeDictionary["Id"] + string.Format("?{0}", queryStringText)); 

,離開語法Razor樣B elow

@Html.GenerateLanguageLink() 

這將解決您的問題。

+0

我實施了你的建議昆丹,但我仍然有同樣的問題。 – Flea

0

我結束了剛剛添加額外的路由值,這顯然會產生正確的查詢,我不必嘗試幷包含值並解碼它。

if (queryStringCollections.Count > 0) 
    { 
     queryStringText = queryStringCollections.ToString(); 
     routeDictionary["category"] = queryStringCollections[0]; 
     routeDictionary["sort"] = queryStringCollections[1]; 
    } 

雖然這不能回答我的問題,但它是正確的做法。