如何讓Action中的id顯示到查詢字串上.

來源:互聯網
上載者:User

最近遇到一比較噁心的問題:

TestController中有Action如下

1         public ActionResult Index(Question question)
2 {
3 return View(question);
4 }

 

其中參數Question定義如下:

 

1     public class Question
2 {
3 public string Id { get; set; }
4 public string Name { get; set; }
5 }

 

那麼我通過Html.ActionLink("樣本","Index","Test",new Question{Id="12312312312",Name="asdfasdfasdf"},null)產生的a標籤的href是:

http://..../Test/Home/12312312312?Name=asdfasdfasdf

就是說它把Id預設放置到了Route裡面了(究其根本是因為我們有預設的route: {controller}/{action}/{id},這裡面的id跟我們的Id重名的原因).這本無所厚非,因為服務端的Action也能正常的綁定參數.但是變態的是,我的Id裡面經常會包含 "/" 比如

Html.ActionLink("樣本","Index","Test",new Question{Id="123/123/123/12",Name="asdfasdfasdf"},null)

這行代碼,產生的結果就是: http://..../Test/Home/123/123/12312?Name=asdfasdfasdf 這肯定是一個非法的url.而且即使我通過Url.Encode把Id的值Encode一下以後雖然看起來似乎是正確的了: http://localhost:3427/Test/Index/123%252f123%252f12312?Name=asdfg 但是由於到了服務端後%252f還會變成/然後再去進行action controller id的匹配,所以就導致我們的id的值還是123/123/12312.這個問題確實比較糾結.

解決方案:

(1):既然是由於預設路由裡麵包含了id這個節的原因而導致id被放在route裡面的,那麼我們可以從預設的route入手,我們可以把預設的路由中的id變成別的,比如 myid: {controller}/{action}/{myid},或者乾脆直接刪除{id}這段.其實也可以通過在{*id}這種形式來強迫123/123/12312匹配給id,但是這種形式牽涉面太廣了,容易影響別的代碼,綜合考慮我選用了直接刪除{id}節的方法.

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.