我在这些动态控件中动态创建了一些控件,有<asp: Image>
控件
当我点击图像控件时,我想调用webmethod。我搜索了很多但没有发生任何事情。
动态控制的代码是
for (int i = 0; i < SearchResult.Length; i++)
{
System.Web.UI.HtmlControls.HtmlGenericControl panel = new System.Web.UI.HtmlControls.HtmlGenericControl("div");
panel.Attributes["class"] = "panel";
panel.ID = "panel_" + (i + 1).ToString();
System.Web.UI.HtmlControls.HtmlGenericControl inside = new System.Web.UI.HtmlControls.HtmlGenericControl("div");
inside.Attributes["class"] = "inside";
Image img = new Image();
img.ImageUrl = SearchResult[i].ImageUrl;
// img.Attributes.Add("onclick", THE WEB Method I want to call);
inside.Controls.Add(img);
Label label = new Label();
label.Text = SearchResult[i].Title;
label.Font.Size = 10;
label.Font.Bold = true;
panel.Controls.Add(label);
panel.Controls.Add(inside);
test.Controls.Add(panel);
}
我的网络方法是
[WebMethod]
public static void AddToDownload(String ConnectionString,String Query)
{
SqlConnection con = new SqlConnection(ConnectionString);
con.Open();
SqlCommand cmd = new SqlCommand(Query, con);
cmd.ExecuteNonQuery();
con.Close();
}
答案 0 :(得分:0)
摆脱“onclick”行并连接服务器端Click事件,如下所示:
protected void Page_Load(object sender, EventArgs e)
{
var img1 = new ImageButton
{
ID = "ImageButton1",
AlternateText = "Button 1"
};
img1.Click += img_Click;
Panel1.Controls.Add(img1);
var img2 = new ImageButton
{
ID = "ImageButton2",
AlternateText = "Button 2"
};
img2.Click += img_Click;
Panel1.Controls.Add(img2);
}
private void img_Click(object sender, ImageClickEventArgs e)
{
var whoClicked = (sender as ImageButton).ID;
}
我已将您的Image服务器控件更改为ImageButton服务器控件,以便更轻松地容纳Click事件。
两个按钮中的每一个都连接到一个公共事件处理程序,然后在事件处理程序中将发送方(启动事件的控件)转换为ImageButton,然后抓取其ID以区分这两个按钮。如果除了ImageButton之外的某些事情发起了点击事件,你可能想要进行空检查。
如果您需要澄清或有其他问题,请告诉我。