2014-03-25 22 views
1

我有一個名爲控制器DummyController我的呼喚控制器它就像DummyController/Index我想這個控制器被稱爲maincontroller/dummycontroller/index其中mainController是不同的控制器完全。更改路由,包括以另一個控制器

代碼DummyController:

public ActionResult Index() 
      { 
       return View("~/Views/main/dummy/index.cshtml",db.Users.ToList()); 
      } 

虛擬控制器的索引文件的位置是main/dummy

現在的問題是,當我叫虛擬控制器的索引頁我得到的網址爲dummy/index我要將網址顯示爲main/dummy/index

有什麼辦法可以創建子控制器嗎? o只更改特定控制器的網址

+0

你有沒有解決這個問題? – JoeBrockhaus

+0

nope..client很高興與一個較短的網址.. – Nikitesh

+0

哈,很酷。謝謝 – JoeBrockhaus

回答

0

這是相對直接的,一旦我通過一個簡單的問題。

通過在我的控制器上使用[RoutePrefix("")] & [Route("")]的組合,我能夠完成這項工作。屬性路由需要在您的Global.asax.cs RegisterRoutes()方法中調用routes.MapMvcAttributeRoutes()

[RoutePrefix("main/dummy")] 
    [Route("{action=index}/{id:long?}")] 
  • {action=index}定義了操作處理的路線,並指定/索引作爲默認操作,如果它不提供(即,〜/主/虛設/將使〜/主/虛設/索引
  • {id:long?}指定ID路由屬性
    • :long是用於約束PARAM到long數據類型
    • ?語法表示這個參數是可選的。( more on this here

這也可以使用標準的MapRoute()技術完成:

routes.MapRoute(
     name: "DummyControllerRoute", 
     url: "main/dummy/{action}/{id}", 
     defaults: new { controller = "Dummy", action = "Index", id = UrlParameter.Optional }); 


我忘了補充什麼我簡單的問題是.. 我有2個動作控制器: Index()Index(id),這將始終導致 AmbiguousRouteException,並導致我相信我的路線定義不正確。改爲 View(id)解決了它。 (我猜技術上的路線 錯了,但我並不需要花更多的時間試圖使其工作方式)

+0

不,如果是這種情況,更好的方法是創建一個基本控制器而不是前綴。 – Nikitesh

+0

聽起來像你所要求的與你實際需要的不同。一個'MyBaseController'只允許跨控制器共享動作。'AChildController'和'BChildController'仍然可以通過類似'/ AChild /'和'/ BChild /'的URL來訪問。另外,只要'MyBaseController'不是'abstract',那麼你就可以擁有像'/ MyBase /'這樣的第三個URL。 – JoeBrockhaus

+0

子分類控制器本身不會啓用這樣的路由。從邏輯上講,它也沒有意義:控制器的每個子類型是否可以通過URL訪問?即:'〜/ MyBase/AChild/AChildAction'或'〜/ MyBase/BChild/BChildAction'。 這也會對MyBase可以包含的動作施加隱式限制。與此類似的模擬在以前的URL中是'/../../../..',它們提供對客戶端不應該訪問的資源的意外訪問。 – JoeBrockhaus

相關問題