0

的兩個參數只是一個我有兩個參數,一個ActionResult:路由與控制器

public ActionResult Index(int a,string b) 
     { 
      //some code 

      return View(b); 
     } 

它會自動創建這個網址:

mysite.com/a=1&b=http://site.com/b=1 

我只需要顯示的第一個參數「一」在我的網址:

mysite.com/a=1 

我使用在global.ascx中創建的MVC的默認路由:

routes.MapRoute(
       "Default", // Route name 
       "{controller}/{action}/{id}", // URL with parameters 
       new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults 
      ); 

我該怎麼辦? 謝謝...

+0

你是什麼意思 「自動創建此網址」?另外,那些應該是'mysite.com/?a = 1'? – parKing 2013-02-19 14:25:28

+0

@parKing這意味着這個URL是通過使用默認路由自動創建的。我想從這個URL隱藏b參數。我可以那樣做嗎? – mortazavi 2013-02-19 15:27:04

+0

對不起,但我從來沒有見過MVC「創建」一個URL。你應該可以用'mysite.com/?a = 1'命中該路線。另外,如果你不想'b',爲什麼這個方法呢?包括它是否會改變功能?如果是這樣,你可能可以將它們分成兩種方法。 – parKing 2013-02-19 15:34:48

回答

0

如果你看到的「B」參數當前請求流血通過,你可以明確地設置「B」參數空字符串,以避免此行爲:

@Html.ActionLink("Home", "Index", "Home", new { a = 1, b = "" }, null) 

reported這個「功能」是一個錯誤,但微軟的開發人員似乎認爲這種行爲會讓你的URL更容易配置,而且他們不打算修復它。

你在這裏看到的是一個路由功能,其中使用「環境」值(即傳入請求的URL中檢測到的值)來簡化(有時候...)生成到其他路由的路由頁面。

你可以在這個StackOverflow的帖子,在那裏我更詳細一點解釋行爲檢查我們我的回答(名稱爲「Eilon」下): How Can I Stop ASP.Net MVC Html.ActionLink From Using Existing Route Values?

最後,如果你想在什麼得到最大程度的控制對於URL生成的,需要考慮幾個選擇:

  1. 使用已命名的路線,以確保只有您想要的路線會習慣產生的URL(這往往是一個很好的做法,但它不會幫助在這種特定情況下)
  2. 指定所有的路由參數顯式 - 甚至是你想要的值都是空的。這是解決這個特殊問題的一種方法。
  3. 您可以使用Razor的〜/語法或調用Url.Content(「〜/ someurl」)來確保您嘗試的URL不會發生額外(或意外)處理,而不是使用路由來生成URL生成。

感謝, Eilon