だから、私は個人的にこれは一種の強打だと思います。
.aspx テンプレートを非標準の場所に置きました。この例では、 の仮想パスがあり~/Content/Sites/magical/Index.aspx
ます。
次に、WebFormsViewEngine を拡張する独自のビュー エンジンをテストとして作成しました。
public class MagicalWebFormsViewEngine : WebFormViewEngine
{
public override ViewEngineResult FindView(ControllerContext controllerContext, string viewName, string masterName, bool useCache)
{
string viewTemplatePath = "~/Content/Sites/magical/" + viewName + ".aspx";
string masterTemplatePath = string.Empty;
return new ViewEngineResult(
this.CreateView(controllerContext, viewTemplatePath, masterTemplatePath),
this
);
}
}
テンプレートは次のようになります。
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Plain.Master" Inherits="System.Web.Mvc.ViewPage<MySoln.Client.Presentation.MyPresenter>" %>
...
<%: Model.SomePresenterSpecificMember %>
Inherits
宣言の属性に厳密に型指定された宣言を残すとPage
、次の例外が発生します。
パーサー エラー メッセージ: タイプ 'System.Web.Mvc.ViewPage<MySoln.Client.Presentation.MyPresenter>' を読み込めませんでした。
ただし、弱く型付けされたページ モデルを使用するようにテンプレートを変更し、代わりにテンプレート自体の Model メンバーでキャストを使用すると、次のように機能します。
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Plain.Master" Inherits="System.Web.Mvc.ViewPage" %>
...
<% var omg = (MySoln.Client.Presentation.MyPresenter) Model; %>
<%: omg.SomePresenterSpecificMember %>
では、私の質問は、なぜ前者の barf と後者が機能するのですか? すべてのテンプレートの上部にあるタグで、Model をプレゼンター タイプの 1 つにキャストしたくありません。
ありがとう!