0

WebPage次のようにインスタンスを動的に作成して、ASP.NETWebページを使用してカスタムルートを作成することを計画しています。

IHttpHandler handler = System.Web.WebPages.WebPageHttpHandler.CreateFromVirtualPath("~/Default.cshtml");

WebPageWebページの「モデル」になるように、基になるオブジェクトにオブジェクトを提供するにはどうすればよいですか?@Model.Firstnameつまり、ファイルに書き込めるようにしたいと思いますDefault.cshtml

どんな助けでも大歓迎です。

アップデート

@Pranavで回答を変更することで、WebPageリフレクションを使用して基になるオブジェクトを取得できました。

    public void ProcessRequest(HttpContext context)
    {
        //var page = (WebPage) System.Web.WebPages.WebPageHttpHandler.CreateFromVirtualPath(this.virtualPath);

        var handler = System.Web.WebPages.WebPageHttpHandler.CreateFromVirtualPath(this.virtualPath);
        var field = handler.GetType().GetField("_webPage", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
        var page = field.GetValue(handler) as System.Web.WebPages.WebPage;

        var contextWrapper = new HttpContextWrapper(context);
        var pageContext = new WebPageContext(contextWrapper, page, context.Items[CURRENT_NODE]);

        page.ExecutePageHierarchy(pageContext, contextWrapper.Response.Output);
    }

残念ながら、これは中程度の信頼では機能しないため、信頼できません(アプリケーションが完全な信頼で実行されていない場合、BindingFlags.NonPublicは無視されます)。そのため、私たちは大きな進歩を遂げましたが、ソリューションはまだ完成していません。

任意の提案をいただければ幸いです。

4

1 に答える 1

2

WebPageのModelプロパティは、WebPageContextから取得されます。モデルを設定するには、適切なパラメータを使用してWebPageContextを作成できます。-

var page = (WebPage)WebPageHttpHandler.CreateFromVirtualPath("~/Default.cshtml");
var httpContext = new HttpContextWrapper(HttContext.Current);
var model = new { FirstName = "Foo", LastName = "Bar" };
var pageContext = new WebPageContext(httpContext, page, model);

page.ExecutePageHierarchy(pageContext, httpContext.Response.Output);

これで、モデルインスタンスが動的タイプとしてページで使用できるようになります。

于 2011-06-20T18:25:43.123 に答える