2009-05-08 9 views
10

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

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

私は本当にこれを行う方法が必要です。これは論理的ルートのようです。

答えて

17

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

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には、私がいくつかのコードを借りた関連情報がいくつかあります)。

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に切り替えます。

上記の内容を忘れてしまった。私は戻ってテストして、Webメソッドが静的なのでLoadControlを呼び出すことはできません。静的なので、呼び出すページオブジェクトがありません。つまり、ユーザーコントロールのロードが動的に行われないことを意味します。

+1

あなたが実際にほとんどが正しいです。 MyUsercontrol uc =(MyUserControl)Page.LoadControl( "/ path/to/MyUserControl.ascx");次に、SomeItem.Controls.Add(uc)を実行します。あなたがデモンストレーションしたようにコントロールを文字列にレンダリングし、dom項目をjQueryを使ってプログラムで追加するか、いずれかの方法で動作します。 – Serapth

+0

実際、私はコントロールを追加することがこの場合のオプションになるとは思わない。完全なポストバック(ページオブジェクトやコントロールを追加するオブジェクトはありません)、jQueryなどからの呼び出しはありませんが、Keltexのアプローチが有効です。 – JaCraig

1

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

1

私はネストされたユーザコントロールを使っていたので、Keltexの回答が私にとっては唯一のものでした。あなたのユーザーコントロールにパラメータを渡すしたい場合はまた、あなたがでそうすることができます。

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

viewcontrol.MyParam = "My value"; 
0

その非常にシンプルな使用する:

yourItem.Controls.Add(LoadControl("~/user control File path")); 
関連する問題