2017-03-29 4 views
0

このエラーが発生し、名前空間の文字列配列を受け入れるMapRouteのオーバーロードを使用して解決しました。私はこの問題が主にハイパーリンクを持っていました。しかし今、私はこの問題をフォームを提出するときに持っています。私はこのように()を呼び出しBeginForm:フォームを送信するときに「コントローラに一致する複数の型が見つかりました」というエラーが発生する

@using (Html.BeginForm("SearchMotorcycle", "Motorcycle", FormMethod.Get)) 

しかし、私は2つのオートバイのコントローラを持って、私は名前空間を指定する必要がありますと仮定します。私が正しくなれば、どうすればいいのですか?

私のオートバイコントローラがである:

appName.Controllers.Search appName.Controllers.add

、それはエラーが発生したときに私に報告されるものです。

+0

あなたは[areas](https://docs.microsoft.com/en-us/aspnet/core/mvc/controllers/areas)の使用について考えましたか? – CodingYoshi

+0

領域を使用している場合、 'BeginForm'は' routeValues'パラメータにエリア名を追加する必要があります。 '@using(Html.BeginForm(" SearchMotorcycle "、" Motorcycle "、new {area =" AreaName "}、FormMethod.Get 、null)) '。 –

答えて

0

これを行うには、ルーティングを使用し、コントローラを別々の名前空間に保持します。 MapRouteでは、ルートに対応する名前空間を指定できます。

を考えると、このコントローラ:

namespace CustomControllerFactory.Controllers 
{ 
public class HomeController : Controller 
{ 
    public ActionResult Index() 
    { 
     return new ContentResult("Controllers"); 
    } 
} 
} 





namespace CustomControllerFactory.ServiceControllers 
{ 
    public class HomeController : Controller 
    { 
    public ActionResult Index() 
    { 
     return new ContentResult("ServiceControllers"); 
    } 
    } 
} 

と次のルーティングを追加します

routes.MapRoute(
     "Services", 
     "Services/{controller}/{action}/{id}", 
     new { controller = "Home", action = "Index", id = UrlParameter.Optional }, 
     new string[] { "CustomControllerFactory.ServiceControllers" } // Namespace 
    ); 


    routes.MapRoute(
     "Default", // Route name 
     "{controller}/{action}/{id}", // URL with parameters 
     new { controller = "Home", action = "Index", id = UrlParameter.Optional }, 
     new string[] { "CustomControllerFactory.Controllers"} // Namespace 
    ); 

あなたは次の応答

/サービス/ホーム期待するべきである - ServiceControllers

と /ホームコントローラー

関連する問題