从AJAX和c#加载UI控件
本文关键字:UI 控件 加载 AJAX | 更新日期: 2023-09-27 18:07:58
我正在尝试动态加载一个*占位符。从AJAX调用中获取ascx页面。但是我在静态方面遇到了一个问题。
不能访问PlaceHolder,因为它不是静态成员。我的代码如下:
HTML: <div id="DInfo">
<asp:PlaceHolder ID="PlaceHolderDInfo" runat="server"></asp:PlaceHolder>
<div id="response"></div>
</div>
c#: [WebMethod]
public static void SetD()
{
//SOME LOGIC TO FIND CORRECT ASCX PAGE
...
//Load the control
PlaceHolderDInfo.Controls.Add(LoadControl([path to ascx]));
}
AJAX: $.ajax({
type: "POST",
url: "LivePlayer.aspx/SetD",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (response) {
$("#response").html(response.d);
},
failure: function (response) {
$("#response").html("error");
}
这个问题发生在c#部分,因为"PlaceHolderDInfo"抛出错误:
- "非静态字段、方法、或属性…"
我如何从SetD()
方法到达占位符?
谢谢你的建议!
web方法中的代码不能使用ASP中的任何对象。网络页面。原因是:它独立于ASP运行。. NET页面进程,因此它对视图状态等一无所知。你应该像对待其他web服务一样对待它。
也就是说,需要返回的是一个字符串;请注意,ASP。. NET web表单和动态控件这种方式不像ASP. NET框架那样容易。NET MVC,因此您必须克服技术障碍才能使其工作。首先是:任何通过返回HTML作为字符串并将其添加到DOM中添加的控件将不会在回发生命周期中保留,并且会出现viewstate的问题。
可以将用户控件作为字符串返回;我已经看到它设置为一个处理程序,它返回HTML作为一个字符串,但找不到我以前见过的设置。