Javascript ASP.NET中的AJAX问题&;C#

Javascript ASP.NET中的AJAX问题&;C#,javascript,c#,jquery,asp.net,ajax,Javascript,C#,Jquery,Asp.net,Ajax,我试图通过AJAX在我的C#code-behind中调用WebMethod。。我有一个引导模式,需要在点击链接按钮时显示,而且当按下链接按钮时,它将通过AJAX触发一个WebMethod,用查询的结果集填充模式体中的一个表 这是我的代码: ASP.NET <asp:LinkButton href="#viewemydevices" data-toggle="modal" ID="ViewMyDevices" runat="server"> <div class="panel-f

我试图通过
AJAX
在我的C#code-behind中调用
WebMethod
。。我有一个引导模式,需要在点击链接按钮时显示,而且当按下链接按钮时,它将通过
AJAX
触发一个WebMethod,用查询的结果集填充模式体中的一个表

这是我的代码:

ASP.NET

<asp:LinkButton href="#viewemydevices" data-toggle="modal" ID="ViewMyDevices" runat="server">
<div class="panel-footer announcement-bottom">
 <div class="row">
      <div class="col-xs-6">
      View Devices
      </div>
      <div class="col-xs-6 text-right">
          <i class="fa fa-arrow-circle-right"></i>
      </div>
 </div>
我不知道我遗漏了什么,模态正在显示,但没有数据显示。所以我认为AJAX没有被解雇


有什么建议吗?

基于代码的粗略外观,需要做一些额外的工作才能使这项工作顺利进行。我可以看到所需的步骤如下:

  • 向链接按钮添加'clientmode=“static”'属性

  • 为modal body div提供ID:

  • ajax请求需要绑定到按钮。在原始代码示例中,情况正好相反——ajax响应是通过单击按钮执行的

  • 从服务器接收到响应后,需要将响应中的HTML内容写入模式对话框内容占位符,如下所示:“$(“#myContent”).HTML(数据);”。请参见下面完整的JS示例:

    $('#ViewMyDevices').click(
        function(){
            $.ajax({
                url: 'Default.aspx?method=ViewMyDevices',
                type: "POST",
                data: '{}',
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function (data) {
                    $('#myContent').html(data);
                }
            })
        });
    
  • 该方法不会自动为您调用,因为您似乎使用的是ASP.NET,而不是MVC。你需要把逻辑连接起来,自己来称呼它。例如,您可以使用如下参数执行ajax请求:“Default.aspx?method=ViewMyDevices”。然后在aspx页面的页面加载事件中,您需要检查请求是否为post类型,并且查询参数是否与方法名称匹配。大概是这样的:

    public void Page_Load(object sender, EventArgs e)
    {
        if(Request.HttpMethod == "POST" && Request.QueryString["method"] == "ViewMyDevices")
        {
            ViewMyDevices();
        }
    }
    
  • 然后,您需要覆盖aspx页面的呈现方法,并检测是否发出POST请求,在这种情况下,只呈现页面的所需部分,即表:

    protected override void Render(HtmlTextWriter writer)
    {
        if(Request.HttpMethod == "POST")
        {
            MyDevicesTable.Render(writer);
            return;
        }
    
        base.Render(writer);
    }
    

我相信,这应该对你有用

您可以通过查看浏览器中的开发人员工具来判断是否启动了ajax。例如,对于Firefox,只需右键单击并选择“Inspect Element”,单击“Network”,您就可以查看对服务器的任何调用。Internet Explorer和Google Chrome都有一个类似的工具。没错,它没有被解雇。我可以确认。我注意到您的链接按钮中有一个额外的“e”:
href=“#viewemydevices”
这就是问题所在吗?web方法不应该是静态的吗?如果你想用这些数据来填充表格,它应该会返回一些东西。你能标记我的代码来显示你的建议吗@jjczopek
$('#ViewMyDevices').click(
    function(){
        $.ajax({
            url: 'Default.aspx?method=ViewMyDevices',
            type: "POST",
            data: '{}',
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (data) {
                $('#myContent').html(data);
            }
        })
    });
public void Page_Load(object sender, EventArgs e)
{
    if(Request.HttpMethod == "POST" && Request.QueryString["method"] == "ViewMyDevices")
    {
        ViewMyDevices();
    }
}
protected override void Render(HtmlTextWriter writer)
{
    if(Request.HttpMethod == "POST")
    {
        MyDevicesTable.Render(writer);
        return;
    }

    base.Render(writer);
}