2017-02-06 21 views
0

我有一個用於創建實體的MVC頁面。完成後,我想重定向到父實體。我不喜歡這樣寫道:使ASP.NET MVC像一個其他參數一樣處理一個名爲「id」的路由參數

return RedirectToAction("Edit", new { id = vm.Parent }); 

當我使用任何其他參數名稱,它被解釋爲一個URL PARAM:

return RedirectToAction("Edit", new { foo = vm.Parent }); 

呈現爲/Entities/Edit?foo=234

但ASP MVC拿起路線作爲特殊情況,名爲id的param的URL如下所示:/Entities/Edit/234。這對我來說不起作用,因爲路由沒有設置爲與此一起工作。我正在尋找像/Entities/Edit?id=234這樣的網址。

我該如何強制它以這種方式工作?路由設置:

routes.MapRoute(
      name: "Default", 
      url: "{controller}/{action}/{id}", 
      defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
     ); 
+3

在您的路由配置中,查找看起來像這樣的映射路由'「{controller}/{動作}/{id}「'並將詳細信息添加到您的問題中。 – spender

+1

您是否使用默認路由? –

+0

@spender添加路線設置 – Johanes

回答

0

通過它的外觀,你只使用默認路由配置路線,只規定id作爲定義UrlParameter。如果你想有一個自定義的參數,那麼你需要將它定義爲這樣的:

routes.MapRoute(
    name: "ControllerName", 
    url: "controllername/edit/{foo}" 
); 

或者,如果你想使用foo代替id全球只有改變現有路線:

routes.MapRoute(
    name: "Default", 
    url: "{controller}/{action}/{foo}", 
    defaults: new { controller = "Home", action = "Index", foo = UrlParameter.Optional } 
); 

或者,如果您不想使用不必要的查詢字符串參數的好看的網址,請改變您的默認設置:

routes.MapRoute(
    name: "Default", 
    url: "{controller}/{action}", 
    defaults: new { controller = "Home", action = "Index" } 
); 
相關問題