C#を使用してascxコントロールをロードしてレンダリングする方法はありますか?C#コードを使用してascxコンポーネントをロードする
本来、インラインASPを同じHTMLを返すC#関数に置き換えようとしています。これにより、元のhtmlを生成した同じコードを使用してjQueryでページのそのセクションを更新できるように、Webメソッドとして設定できます。
私は本当にこれを行う方法が必要です。これは論理的ルートのようです。
C#を使用してascxコントロールをロードしてレンダリングする方法はありますか?C#コードを使用してascxコンポーネントをロードする
本来、インラインASPを同じHTMLを返すC#関数に置き換えようとしています。これにより、元のhtmlを生成した同じコードを使用してjQueryでページのそのセクションを更新できるように、Webメソッドとして設定できます。
私は本当にこれを行う方法が必要です。これは論理的ルートのようです。
あなたがコントロールをレンダリングするページを作成する必要があります。
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();
}
}
、独自のユーザーコントロールは表示されません。 (This articleには、私がいくつかのコードを借りた関連情報がいくつかあります)。
私はこれを試していませんでしたが、あなたは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に切り替えます。
上記の内容を忘れてしまった。私は戻ってテストして、Webメソッドが静的なのでLoadControlを呼び出すことはできません。静的なので、呼び出すページオブジェクトがありません。つまり、ユーザーコントロールのロードが動的に行われないことを意味します。
このExplanationには、あなたが探している回答が必要です。基本的には、コードビヘイビアのページでコントロールを宣言してから、LoadControlをコードビハインドに宣言する必要があります。
私はネストされたユーザコントロールを使っていたので、Keltexの回答が私にとっては唯一のものでした。あなたのユーザーコントロールにパラメータを渡すしたい場合はまた、あなたがでそうすることができます。
_MyNameSpace_MyUserControl viewcontrol = (_MyNameSpace_MyUserControl) pageHolder.LoadControl(path);
viewcontrol.MyParam = "My value";
その非常にシンプルな使用する:
yourItem.Controls.Add(LoadControl("~/user control File path"));
あなたが実際にほとんどが正しいです。 MyUsercontrol uc =(MyUserControl)Page.LoadControl( "/ path/to/MyUserControl.ascx");次に、SomeItem.Controls.Add(uc)を実行します。あなたがデモンストレーションしたようにコントロールを文字列にレンダリングし、dom項目をjQueryを使ってプログラムで追加するか、いずれかの方法で動作します。 – Serapth
実際、私はコントロールを追加することがこの場合のオプションになるとは思わない。完全なポストバック(ページオブジェクトやコントロールを追加するオブジェクトはありません)、jQueryなどからの呼び出しはありませんが、Keltexのアプローチが有効です。 – JaCraig