在动态创建的Control上使用Javascript调用Web方法

时间:2013-06-17 17:08:32

标签: javascript asp.net webmethod

我在这些动态控件中动态创建了一些控件,有<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();
    }

1 个答案:

答案 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之外的某些事情发起了点击事件,你可能想要进行空检查。

如果您需要澄清或有其他问题,请告诉我。