10

C#を使用してascxコントロールをロードしてから「レンダリング」する方法はありますか?

基本的に、インラインASPを同じHTMLを返すC#関数に置き換えようとしています。これにより、元のhtmlを生成したのと同じコードを使用して、ページのそのセクションをjQueryで更新できるように、Webメソッドとして設定できます。

私は本当にこれを行うための何らかの方法が必要です、そしてこれは論理的なルートのようです。

4

5 に答える 5

18

コントロールをレンダリングするページを作成する必要があります。

public static string RenderUserControl(string path)
{
    Page pageHolder = new Page();
    Control viewControl = pageHolder.LoadControl(path);

    pageHolder.Controls.Add(viewControl);
    using(StringWriter output = new StringWriter())
    {
        HttpContext.Current.Server.Execute(pageHolder, output, false);
        return output.ToString();
    }
}

ユーザーコントロール自体はレンダリングされません。(この記事には、私がいくつかのコードを借りたいくつかの関連情報があります)。

于 2009-05-08T19:33:45.137 に答える
2

ネストされたユーザーコントロールを使用していたので、Keltexの答えだけが私のために機能しました。さらに、ユーザーコントロールにパラメーターを渡したい場合は、次の方法で行うことができます。

_MyNameSpace_MyUserControl viewcontrol = (_MyNameSpace_MyUserControl) pageHolder.LoadControl(path);

viewcontrol.MyParam = "My value";
于 2010-04-20T14:08:50.507 に答える
1

この説明には、あなたが探している答えが含まれているはずです。基本的に、ページでコントロールを宣言してから、コードビハインドでLoadControlを宣言する必要があります。

于 2009-05-08T18:50:15.787 に答える
1

私はこれを試していませんが、LoadControl関数を使用してコントロールをロードできます。

Control Example = LoadControl("~\\Controls\\MyControl.ascx");

次に、コントロールのレンダリングを試すことができます。

StringWriter sw = new StringWriter();
HtmlTextWriter htw = new HtmlTextWriter(sw);
Example.RenderControl(htw);
Response.Write(sw.ToString());
Response.End();

ただし、必ずVerifyRenderingInServerFormをオーバーライドし、ページでEnableEventValidationをfalseに切り替えてください。

私が上で書いたことを忘れてください。戻ってテストしましたが、webmethodが静的であるため、LoadControlを呼び出すことができません。静的であるため、呼び出すPageオブジェクトはありません...つまり、ユーザーコントロールを動的にロードする必要はありません。

于 2009-05-08T18:41:06.137 に答える
0

使い方はとても簡単です。

yourItem.Controls.Add(LoadControl("~/user control File path"));
于 2013-04-14T20:25:50.833 に答える