我使用了这个示例并在 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 类中。
我正在重新使用 IFrame。也许我会以另一种方式使用这种技术。
感谢您的努力。
您是否在 Web 服务的方法中放置了一个断点,以查看它是否真的命中了 Web 服务?
我要研究的另一个选项是使用 XML 样式表,并仅使用样式表和 XML Server 控件转换此数据。与添加更新面板和调用 Web 服务进行转换相比,这将使用更少的开销。
此外,请检查以确保在您调用的页面上正确设置了您的脚本管理器。
在您的 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>
此外,他的教程没有提到这一点,但你必须在你的 web 服务的类上有这个属性才能从 javascript 调用它:
[System.Web.Script.Services.ScriptService]
除了这些想法,我还得看看你的代码。
谢谢你的提示。仍然,我得到了同样的错误:
“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;
}
}