动态创建ImageButton并将其onclick函数设置为ServerTransfer到另一个WebForm

时间:2014-07-24 16:14:01

标签: c# javascript asp.net webforms

所以基本上我在Div元素中创建带有for循环的ImageButtons,
但是当我创建这个ImageButtons时我设置的onclick功能不起作用而且它不会传输。所以我猜我没有正确添加功能,虽然下面的按钮功能工作正常

 protected void Page_Load(object sender, EventArgs e)
        {
              foreach (string strFileName in Directory.GetFiles(Server.MapPath("~/path/")))
            {
                  ImageButton imageButton = new ImageButton();
                  FileInfo fileInfo = new FileInfo(strFileName);
                  imageButton.ImageUrl = "~/path/" + fileInfo.Name.ToString();
                  imageButton.Attributes.Add("ID" , strFileName);                                  
                  imageButton.Attributes.Add("class","imgOne");
                  imageButton.Attributes.Add("runat", "server");
                  imageButton.Attributes.Add("OnClick", "toImageDisplay");
                  photos.Controls.Add(imageButton);



            }



        }
        public void toImageDisplay() 
        {
            Server.Transfer("ImageDisplay.aspx");
        }

        protected void Unnamed1_Click(object sender, EventArgs e)
        {
            toImageDisplay();
        }

2 个答案:

答案 0 :(得分:1)

这是我得到的:

    private void LoadPictures()
    {
        foreach (string strFileName in Directory.GetFiles(Server.MapPath("~/path/")))
        {
            ImageButton imageButton = new ImageButton();
            FileInfo fileInfo = new FileInfo(strFileName);
            imageButton.ImageUrl = "~/path/" + fileInfo.Name.ToString();
            imageButton.Click += new ImageClickEventHandler(imageButton_Click);
            imageButton.ID = Path.GetFileName(strFileName);
            photos.Controls.Add(imageButton);
            //imageButton.Attributes.Add("ID", strFileName);
            //imageButton.Attributes.Add("class", "imgOne");
            //imageButton.Attributes.Add("runat", "server");
            //imageButton.Attributes.Add("OnClick", "toImageDisplay");
        }
    }

    void imageButton_Click(object sender, ImageClickEventArgs e)
    {
        //your code...
    }

在页面加载中调用LoadPictures()。

如上所述,您需要连接点击事件而不是仅添加它。

答案 1 :(得分:0)

您需要连接事件而不是添加onclick属性。有两种方法可以解决这个问题(你不需要手动添加runat = server):

1

foreach (string strFileName in Directory.GetFiles(Server.MapPath("~/path/")))
{
       ImageButton imageButton = new ImageButton();
       FileInfo fileInfo = new FileInfo(strFileName);
       imageButton.ImageUrl = "~/path/" + fileInfo.Name.ToString();
       imageButton.Attributes.Add("ID" , strFileName);                                  
       imageButton.Click += Unnamed1_Click;
       photos.Controls.Add(imageButton);
}

2。 第二个涉及javascript ...在您的代码中,而不是指定要调用的服务器端方法,只需使用:

imageButton.Attributes.Add("onclick", string.format("location.href('{0}');","whateverURL.html"));