C# 从AJAX和C加载UI控件#

C# 从AJAX和C加载UI控件#,c#,jquery,asp.net,.net,ajax,C#,Jquery,Asp.net,.net,Ajax,我试图从AJAX调用动态加载带有*.ascx页面的占位符。但是我遇到了一个静态方面的问题 我无法访问占位符,因为它不是静态成员。我的代码如下: HTML: 阿贾克斯: 当“Placeholder Dinfo”抛出错误时,问题发生在C#部分: “非静态字段、方法、, 或属性…” 如何从SetD()方法访问占位符 谢谢你的建议 web方法中的代码不能使用ASP.NET页面中的任何对象。原因是:它与ASP.NET页面进程分开运行,因此它对viewstate等一无所知。您应该像对待任何其他web服务

我试图从AJAX调用动态加载带有*.ascx页面的占位符。但是我遇到了一个静态方面的问题

我无法访问占位符,因为它不是静态成员。我的代码如下:

HTML:

阿贾克斯:

当“Placeholder Dinfo”抛出错误时,问题发生在C#部分:

  • 非静态字段、方法、, 或属性…”
如何从
SetD()
方法访问占位符


谢谢你的建议

web方法中的代码不能使用ASP.NET页面中的任何对象。原因是:它与ASP.NET页面进程分开运行,因此它对viewstate等一无所知。您应该像对待任何其他web服务一样对待它

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


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

错误告诉您目标对象需要非静态方法,因此您应该将目标加载控件设置为静态,或者将静态从
SetD()
方法中删除。删除静态不是一个选项。但是你是如何将UI控件设置为静态的呢?我猜你是这么说的吧?我非常感谢你的回复。因此,如果我正确地阅读了您的回复,类似的东西可能会起作用是的,这就是我刚才提到的设置。我自己从未使用过它,但它应该可以正常工作,因为您可以将控件呈现给字符串。
    <div id="DInfo">
        <asp:PlaceHolder ID="PlaceHolderDInfo" runat="server"></asp:PlaceHolder>  
        <div id="response"></div>  
    </div>
    [WebMethod]
    public static void SetD()
    {
       //SOME LOGIC TO FIND CORRECT ASCX PAGE
       ...

       //Load the control 
       PlaceHolderDInfo.Controls.Add(LoadControl([path to ascx]));
    }
    $.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");
    }