asp web表单中的Ajax不会被调用

时间:2016-12-14 03:40:06

标签: asp.net ajax webforms

我有很多按钮,当用户点击一个按钮时,我希望它用ajax更新标签。

我在模板中实现了ajax,如下所示:

<form runat="server">
    <asp:ScriptManager ID="ScriptManagerPull" runat="server"> 
    </asp:ScriptManager>
    <asp:UpdatePanel ID="UpdatePanel1" runat="server">
        <ContentTemplate>
            <div runat="server" id="SiteContent">
            </div>
        </ContentTemplate>
    </asp:UpdatePanel>
</form>

按钮是动态生成的;

foreach (MyDTO myDTO in List) {
    Button ButtonPull = new Button();
    ButtonPull.Text = "Pull";
    ButtonPull.ID = articleDTO.ArticleID.ToString();
    ButtonPull.ControlStyle.CssClass = "btn btn-default";
    ButtonPull.Click += new EventHandler(Pull_Click);
    SiteContent.Controls.Add(ButtonPull);
}

现在的问题是,当用户点击按钮时,事件不会被调用。这不起作用:

protected void Pull_Click(object sender, EventArgs e) {
    // Button button = sender as Button;
    LabelTest.Text = "Cool";  
}

我该怎么做?

感谢。

1 个答案:

答案 0 :(得分:0)

我假设您不是只想调用click事件,而是可能通过AJAX将一些数据从客户端传递到服务器。最简单的方法是在没有ScriptManagerUpdatePantel的情况下执行此操作,所有这些都是这样的。我创建了一个按钮,它在服务器端没有单击事件处理程序。但它在客户端有一个。

protected void Page_Load(object sender, EventArgs e)
{
    Button ButtonPull = new Button();
    ButtonPull.Text = "Pull";
    ButtonPull.ID = "Button1";
    ButtonPull.ControlStyle.CssClass = "btn btn-default";
    this.Form.Controls.Add(ButtonPull);

    // You can pass anything you want to the server. Here I am passing 1111
    // You can pass things from the client side as well. Whole JSON objects as well
    ButtonPull.OnClientClick = "callServer(1111);return false;"; // return false so button does not postback
}

我还将此方法添加到我的页面后面的代码中。这是一个Web方法,它接收id为int并将其附加到字符串并将该字符串返回给客户端。

[WebMethod]
[ScriptMethod(UseHttpGet = true,
ResponseFormat = ResponseFormat.Json, XmlSerializeString = false)]
public static string GetStuffFromServer(int id)
{
    return "Works like a charm! And id is " + id ;
}

最后将此添加到我看来。当在客户端单击按钮时,它将调用此函数并在我们创建按钮时按照上面的指示传递1111。在这个函数内部,我们使用jQuery ajax调用来调用服务器方法GetSuffFromServer。如果一切顺利,服务器将返回,我们将在此处取得成功并提醒从服务器返回的数据。同样,服务器可以返回任何所需的内容。此方法可以向服务器发送所需的任何内容。

<script>
    function callServer(id) {
        $.ajax({
            type: "GET",
            contentType: "application/json; charset=utf-8",
            url: "default.aspx/GetStuffFromServer?id=" + id,
            success: function (data)
            {
                alert(data.d);
            },
            error: function (data) { alert(data);}
        });
    }
</script>

App_Start文件夹的RouteConfig.cs文件中的最后一件事改变了这一行:

settings.AutoRedirectMode = RedirectMode.Permanent;

到此:

settings.AutoRedirectMode = RedirectMode.Off; 

此更改是因为我在调用Web方法时使用了友好的URL:default.aspx / GetStuffFromServer?id =