この例を使用して、ascx コントロール内にフォームを作成しました。
http://encosia.com/2008/02/05/boost-aspnet-performance-with-deferred-content-loading/
問題は、asp.net ボタンまたは更新パネルを配置するたびに、ascx が読み込まれないことです。何が問題なのですか?
この例を使用して、ascx コントロール内にフォームを作成しました。
http://encosia.com/2008/02/05/boost-aspnet-performance-with-deferred-content-loading/
問題は、asp.net ボタンまたは更新パネルを配置するたびに、ascx が読み込まれないことです。何が問題なのですか?
コントロールを HtmlForm クラスに配置し、次に HtmlForm を Page クラスに配置する必要があることを発見しました。
私は代わりに IFrames を使用することに頼っています。たぶん、このテクニックを別の方法で使用します。
努力してくれてありがとう。
ヒントをありがとう。それでも、同じエラーが発生しました:
「System.Web.HttpException: タイプ 'Button' のコントロール 'ctl00_Button1' は、runat=server のフォーム タグ内に配置する必要があります。」
動的js JQueryタブ内にコントロールをロードしています。
$.ajax({
type: "POST",
url: "TabLoader.asmx/LoadNewTab",
data: "{'fullname':'" + fullname +
"', 'id':'" + id + "'}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(msg) {
$(tabName).html(msg.d);
}
});
asmx の場合:
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.Web.Script.Services.ScriptService]
[Serializable]
public class TabLoader : System.Web.Services.WebService
{
private Page _page;
[WebMethod]
public string LoadNewTab(string fullname, string id)
{
_page = new Page();
UserControl ctl = LoadControl("~/controls/ctrlTabContent.ascx",
fullname,
Convert.ToInt32(id));
_page.Controls.Add(ctl);
StringWriter writer = new StringWriter();
HttpContext.Current.Server.Execute(_page,
writer,
false);
return writer.ToString();
}
private UserControl LoadControl(string userControlPath,
params object[] constructorParams)
{
List<Type> constParamTypes = new List<Type>();
foreach (object cp in constructorParams)
{
constParamTypes.Add(cp.GetType());
}
UserControl userCtrl = (UserControl)_page.LoadControl(userControlPath);
ConstructorInfo constructor = userCtrl.GetType().BaseType.GetConstructor(constParamTypes.ToArray());
if (constructor == null)
throw new MemberAccessException("The requested constructor was not found on : " + userCtrl.GetType().BaseType.ToString());
else
constructor.Invoke(userCtrl, constructorParams);
return userCtrl;
}
}
Web サービスのメソッド内にブレークポイントを配置して、実際に Web サービスにアクセスしているかどうかを確認しましたか?
もう 1 つの選択肢として、XML スタイルシートを使用し、スタイルシートと XML サーバー コントロールを使用してこのデータを変換する方法があります。これは、updatepanel を追加して変換用の Web サービスを呼び出すよりもオーバーヘッドが少なくなります。
また、呼び出し元のページで scriptmanager が正しく設定されていることを確認してください。
aspx で、コードが次のようになっていることを確認します。
<form id="form1" runat="server">
<asp:ScriptManager runat="server">
<Services>
<asp:ServiceReference Path="~/RSSReader.asmx" />
</Services>
<Scripts>
<asp:ScriptReference Path="~/Default.js" />
</Scripts>
</asp:ScriptManager>
</form>
<div id="Container">
<div id="RSSBlock">
<div id="RSSContent" class="loading"></div>
</div>
<div id="Content">
<p></p>
</div>
</div>
また、彼のチュートリアルではこれについて言及していませんが、JavaScript から呼び出し可能にするには、Web サービスのクラスにこの属性が必要です。
[System.Web.Script.Services.ScriptService]
それらのアイデア以外に、私はあなたのコードを見なければなりません。