5

通常のビューエンジンを使用したMVC 2では、ascx部分ビューを文字列として返すことができましたreturn Json()

しかし、新しい Razor .cshtml ビューでは、これを行う方法がわかりません。私は得続けますType 'ASP.CustomerForm_cshtml' does not inherit from 'System.Web.UI.UserControl'.

最初のエラーが示すように、部分ビューがから継承し、継承するSystem.Web.Mvc.WebViewPage<T>と別のエラーがポップアップしSystem.Web.UI.UserControl<T>ます。

ASP MVC 3 と Razor ビュー エンジンを使用してこれを修正する方法について何か考えはありますか?

これは私の ControlToString 関数です:

    private string ControlToString(string controlPath, object model)
    {
        ViewPage page = new ViewPage();
        ViewUserControl ctl = (ViewUserControl)page.LoadControl(controlPath);
        page.Controls.Add(ctl);
        page.ViewData.Model = model;
        page.ViewContext = new ViewContext();
        System.IO.StringWriter writer = new System.IO.StringWriter();
        System.Web.HttpContext.Current.Server.Execute(page, writer, false);
        string outputToReturn = writer.ToString();
        writer.Close();
        //return this.Json(outputToReturn.Trim());
        return outputToReturn.Trim();
    }
4

2 に答える 2

6

これは、レンダリングされたcshtmlファイルを返すことを検証する以外に、テストせずに頭のてっぺんから書いたので、役立つかもしれません。

これはコントローラーのメソッドだと思いました。

private string ControlToString(string controlPath, object model) {
    CshtmlView control = new CshtmlView(controlPath);

    HtmlTextWriter writer = new HtmlTextWriter(new System.IO.StringWriter());
    control.Render(new ViewContext(this.ControllerContext, control, this.ViewData, this.TempData, writer), writer);

    string value = ((StringWriter)writer.InnerWriter).ToString();

    return value;
}
于 2010-09-12T19:54:38.747 に答える
5

これはコードの MVC 3 ベータ版です。

    private string ControlToString(string controlPath, object model)
    {
        //CshtmlView control = new CshtmlView(controlPath);
        RazorView control = new RazorView(this.ControllerContext, controlPath, null, false, null);

        this.ViewData.Model = model;

        HtmlTextWriter writer = new HtmlTextWriter(new System.IO.StringWriter());
        control.Render(new ViewContext(this.ControllerContext, control, this.ViewData, this.TempData, writer), writer);

        string value = ((StringWriter)writer.InnerWriter).ToString();

        return value;
    }
于 2010-10-24T16:07:57.897 に答える