2

私はこのコードを持っています:

public static string RenderView(string path)
{
    Page pageHolder = new Page();
    UserControl viewControl = (UserControl)pageHolder.LoadControl(path);

    pageHolder.Controls.Add(viewControl);

    StringWriter output = new StringWriter();
    HttpContext.Current.Server.Execute(pageHolder, output, false);

    return output.ToString();
}

から実行されます:

    [WebMethod]
    public string GetReportsHTML()
    {
        string output = "";

        output = ViewManager.RenderView("ReportsControl.ascx");

        return output;
    }

これは、ASCXファイルのレンダリングをテストし、SOAP/RESTサービスからそれらを吐き出すことです。

問題は、一部のコントロール(runat = serverのもの)がrunat = serverのタグにカプセル化されていない場合、失敗することです。

これに対する解決策はここにありますが、解決策は、マークアップを編集できるASPXファイル内にあることを前提としています。

プログラムでページを作成し、フォームを追加し、runat = serverを設定して、そのソリューションに従い、フォームコントロールにコントロールを追加するにはどうすればよいですか?

4

1 に答える 1

3

このようなことを試しましたか?

public static string RenderView(string path)
{
    Page pageHolder = new Page();
    System.Web.UI.HtmlControls.HtmlForm formHolder = new System.Web.UI.HtmlControls.HtmlForm();
    pageHolder.Controls.Add(formHolder );

    UserControl viewControl = (UserControl)pageHolder.LoadControl(path);

    formHolder.Controls.Add(viewControl);

    StringWriter output = new StringWriter();
    HttpContext.Current.Server.Execute(pageHolder, output, false);

    return output.ToString();
}

これがお役に立てば幸いです

于 2013-02-05T15:03:46.360 に答える