2012-10-22 47 views
2

我已經嘗試過在StackOverflow中爲此主題提供的所有可能的鏈接,這裏給出的所有建議都是由Rick Anderson觀看視頻,但沒有任何積極結果。仍然得到恐懼「多種類型被發現......」消息。而我的項目只是一個設置來嘗試面積現象。 Razor viewer是否可以使用Area's?或僅與ASPX ??無法擺脫「找到與控制器相匹配的多種類型」

這是我有: 在Global.asax中:

routes.MapRoute(_ 
     "Default", _ 
     "{controller}/{action}/{id}", _ 
     New With {.controller = "Home", .action = "Index", .id = UrlParameter.Optional}, New String() {"MyApplication.Controllers"}) 

在三個獨立的AreaRegistration文件:

 Public Overrides Sub RegisterArea(ByVal context As System.Web.Mvc.AreaRegistrationContext) 
     context.MapRoute(_ 
      "Shopping_default", _ 
      "Shopping/{controller}/{action}/{id}", _ 
      New With {.controller = "Home", .action = "Index", .id = UrlParameter.Optional}) 
    End Sub 

和:

 Public Overrides Sub RegisterArea(ByVal context As System.Web.Mvc.AreaRegistrationContext) 
     context.MapRoute(_ 
      "Blog_default", _ 
      "Blog/{controller}/{action}/{id}", _ 
      New With {.controller = "Home", .action = "Index", .id = UrlParameter.Optional}) 
    End Sub 

和:

 Public Overrides Sub RegisterArea(ByVal context As System.Web.Mvc.AreaRegistrationContext) 
     context.MapRoute(_ 
      "Admin_default", _ 
      "Admin/{controller}/{action}/{id}", _ 
      New With {.controller = "Home", .action = "Index", .id = UrlParameter.Optional}) 
    End Sub 

我有三個AreaRegistration文件沒有額外的引用「.controller =」Home「」,但它都給出了相同的結果。我也嘗試爲命名空間的這三個聲明添加額外的參數。我曾嘗試將此添加到Global.asax中:

 ControllerBuilder.Current.DefaultNamespaces.Add("MyApplication.Admin.Controllers") 
    ControllerBuilder.Current.DefaultNamespaces.Add("MyApplication.Blog.Controllers") 
    ControllerBuilder.Current.DefaultNamespaces.Add("MyApplication.Shopping.Controllers") 

    ControllerBuilder.Current.DefaultNamespaces.Add("MyApplication.Controllers") 

但是,這也沒有積極的結果。我也試過在AreaRegistration類中沒有應用程序名稱。我可以嘗試哪些可能的其他行動(並取得成功的結果)? projectstrcuture很簡單:我從一個空的項目開始,立即添加了三個區域,HomeControllers和Index視圖。名稱空間沒有改變,所有這些都是儘可能默認的。使用MVC 4模板。 任何人的建議?

Peter

回答

2

的問題解決了,像這樣:

  1. 改變由模板給予,對於每一個控制器的默認命名空間中,通過添加%AppName的%.Areas%AREANAME%.Controllers。所以在上面的例子中,管理區域的HomeController被放置在命名空間

    Namespace MyApplication.Areas.Admin.Controllers 
    

    這恰好是同一個命名空間,因爲在這是由模板提供的AreaRegistration類,與「控制器」後綴添加到它。

  2. 改變在Global.asax中的代碼如下所示:

    routes.MapRoute(_ 
        "Default", _ 
        "{controller}/{action}/{id}", _ 
        New With {.controller = "Home", .action = "Index", .id = UrlParameter.Optional}, New String() {"MyApplication"} _ 
    ) 
    

    所以這裏的 「所有MyApplication」 命名空間被添加。這是正確的根據PRESUMPTION,在應用程序根HomeController中添加沒有NAMESPACE(這是默認值)。如果根HomeController中有一個名稱空間,則應在Global.asax文件中使用該名稱空間。

我已經發現有其他的方法來解決同樣的問題,但這是一個相比於模板生成的代碼最少的代碼更改。

0

當您創建區域時,請不要更改其默認名稱空間。看起來您已將它們從MyApplication.Areas.Admin.Controllers更改爲MyApplication.Admin.Controllers(與BlogShopping相同)。如果您使用默認約定,則不應收到此錯誤。

+0

嗨danludwig,雖然我不確定,但我認爲你在這裏是正確的。我用稍微不同的方式解決了這個問題。我將在下面提供我的解決方案。 –

相關問題