从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()方法到达占位符?

谢谢你的建议!

从AJAX和c#加载UI控件

web方法中的代码不能使用ASP中的任何对象。网络页面。原因是:它独立于ASP运行。. NET页面进程,因此它对视图状态等一无所知。你应该像对待其他web服务一样对待它。

也就是说,需要返回的是一个字符串;请注意,ASP。. NET web表单和动态控件这种方式不像ASP. NET框架那样容易。NET MVC,因此您必须克服技术障碍才能使其工作。首先是:任何通过返回HTML作为字符串并将其添加到DOM中添加的控件将不会在回发生命周期中保留,并且会出现viewstate的问题。

可以将用户控件作为字符串返回;我已经看到它设置为一个处理程序,它返回HTML作为一个字符串,但找不到我以前见过的设置。