我有很多按钮,当用户点击一个按钮时,我希望它用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";
}
我该怎么做?
感谢。
答案 0 :(得分:0)
我假设您不是只想调用click事件,而是可能通过AJAX将一些数据从客户端传递到服务器。最简单的方法是在没有ScriptManager
,UpdatePantel
的情况下执行此操作,所有这些都是这样的。我创建了一个按钮,它在服务器端没有单击事件处理程序。但它在客户端有一个。
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 =