基本的な機能を備えたサイトを持っていますが、さまざまなクライアントやさまざまなパートナーに基づいてオーバーライドできます。ルーティングは、ルートの一部としてクライアント名とパートナー名を処理するように設定されています。
routes.MapRoute(
"DefaultRoute", // Route name
"{client}/{portal}/{controller}/{action}/{id}", // URL with parameters
new { client="UNKNOWN", portal="UNKNOWN", controller = "Home", action = "Index", id = UrlParameter.Optional }, // Parameter defaults
new string[] { "Enterprise.Portal.Controllers" }
);
通常のビューに取って代わるビューが存在するかどうかを判断するためのヘルパー クラスがあります。サイトにはさまざまなクライアントがあり、各クライアントにはさまざまなパートナーがいます。これらのクライアントは、既定のビューが必要ない場合に HTML を提供できます。パートナーも同じことを行うことができます。これらの代替ビューをフォルダーに保存します。ヘルパー クラスは情報を取得し、別のビューが存在する場合は、このビューへのファイル パスを返します。null または空の文字列を返す場合は、通常のビューが使用されます。
public static string ViewPath(string basePath, string client, string partner, string controller, string viewname)
// This returns something like C:\Sites\Portal\UI\ClientName\PartnerName\ControllerName\View.cshtml
私のコントローラーでは、これが null 以外または空の値を返す場合、そのビューを使用するにはどうすればよいですか。これが私がやったことですが、うまくいきません:
if (String.IsNullOrEmpty(this.model.CurrentViewLocation))
{
return View(model);
}
else
{
return View(this.model.CurrentViewLocation, model);
}
return View() コンストラクターはパス名を使用できず、ビュー名のみを使用できるため、次のエラーが発生します。これを達成する方法はありますか?「~\UI\Client\Partner\Controller\View.cshtml」のように、必要に応じてパスを仮想 Web パスに変換できます。
Server Error in '/' Application
The view 'C:\Sites\Portal\UI\ClientName\PartnerName\Account\LogOn.cshtml' or its master was not found or no view engine supports the searched locations. The following locations were searched:
~/Views/Account/C:\Sites\Portal\UI\ClientName\PartnerName\Account\LogOn.cshtml.aspx
~/Views/Account/C:\Sites\Portal\UI\ClientName\PartnerName\Account\LogOn.cshtml.ascx
~/Views/Shared/C:\Sites\Portal\UI\ClientName\PartnerName\Account\LogOn.cshtml.aspx
~/Views/Shared/C:\Sites\Portal\UI\ClientName\PartnerName\Account\LogOn.cshtml.ascx
~/Views/Account/C:\Sites\Portal\UI\ClientName\PartnerName\Account\LogOn.cshtml.cshtml
~/Views/Account/C:\Sites\Portal\UI\ClientName\PartnerName\Account\LogOn.cshtml.vbhtml
~/Views/Shared/C:\Sites\Portal\UI\ClientName\PartnerName\Account\LogOn.cshtml.cshtml
~/Views/Shared/C:\Sites\Portal\UI\ClientName\PartnerName\Account\LogOn.cshtml.vbhtml
これを行うためのより良い方法は、ビューの検索に使用されるビュー エンジンの場所の形式にクライアント フォルダーとパートナー フォルダーを追加することだと思います。ただし、フォーマット文字列には、コントローラの {0} とビュー名の {1} しか含まれていません。どちらもルートを介して渡されるクライアントとパートナーも渡すには、それをオーバーライドする必要があります。