2017-03-16 93 views
1

我已將兩個應用程序之間共享的代碼移除到包含控制器的共享項目中。我得到「多種類型被發現,匹配控制器名爲」錯誤。我不知道爲什麼會發生這種情況。所以這是我的共享控制器項目之間的MVC共享項目找到控制器的多種類型

namespace App.Web.Shared.Controllers 
{ 
    public class ParkingTicketController : BaseController 
    { 
    public ParkingTicketController(ServiceLocator serviceLocator) : base(serviceLocator) 
    { 
    } 

    /// <summary> 
    /// Views the specified identifier. 
    /// </summary> 
    /// <param name="publicId">The public identifier.</param> 
    /// <returns></returns> 
    [AuthorizeAccess(Roles = ApplicationRoles.None)] 
    public ActionResult Display(string publicId) 
    { 
     //Shared 
    } 
} 
} 


namespace App.Web.Driver.Controllers 
{ 
[AuthorizeAccess(Roles = ApplicationRoles.Driver)] 
public class ParkingTicketController : Shared.Controllers.ParkingTicketController 
{ 
    // 
    // GET: /ParkingTicket/ 

    /// <summary> 
    /// Initializes a new instance of the <see cref="ParkingTicketController"/> class. 
    /// </summary> 
    /// <param name="serviceLocator">The service locator.</param> 
    public ParkingTicketController(ServiceLocator serviceLocator) : base(serviceLocator) 
    { 
    } 
} 

}

這是建立路由。所以應該匹配的驅動程序控制器

routes.MapRoute(
    name: "Default", 
    url: "{controller}/{action}/{id}", 
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional}, 
        namespaces: new[] { "App.Web.Driver.Controllers" }); 

我只是從我的觀點稱這是

@Html.ActionLink("View Print", "Display", "ParkingTicket", new { id = Model.ParkingTicket.PublicId }, new { @class = "btn btn-blue" }) 

錯誤消息

enter image description here

回答

2

如果您不希望您的共享控制器服務任何請求,那麼您可以定義要查找的默認名稱空間; taken from here

ControllerBuilder.Current.DefaultNamespaces.Clear(); 
ControllerBuilder.Current.DefaultNamespaces.Add("App.Web.Driver.Controllers"); 

而這應該限制任何查找只是你的主命名空間。如果你添加另一個重要的命名空間,那麼你必須將它添加到這個列表中。

相關問題