访问在aspx上的代码隐藏文件中创建的图像按钮

时间:2015-08-02 00:55:23

标签: c# asp.net

我在代码隐藏文件中创建了一个图像按钮。它有一个事件imageButton_Click。我还想使用此图像按钮和事件为aspx page.amspanel(基本上是一个面板)中的更新面板创建异步回发触发器,使用图像按钮从文件夹加载所有图像。我基本上尝试在页面上进行部分回发,而不是在我点击amspanel中的图像时再次加载amspanel。

有可能吗?现在它说....无法在UpdatePanel'UpdatePanel1'的触发器的相关控件'imageBtn1'上找到名为'imageButton_Click'的事件。

        private void LoadImages()
        {
        var fileIdx = 0;

            foreach (string strfile in Directory.GetFiles(Server.MapPath("~/images")))
            {
                fileIdx++;
                ImageButton imageButton = new ImageButton() { ID = "imageBtn" + fileIdx };
                FileInfo fi = new FileInfo(strfile);
                imageButton.ImageUrl = "~/images/" + fi.Name;
                imageButton.Height = Unit.Pixel(100);
                imageButton.Style.Add("padding", "5px");
                imageButton.Width = Unit.Pixel(100);
                imageButton.Click += new ImageClickEventHandler(imageButton_Click);
                AMSPanel1.Controls.Add(imageButton);
                AMSPanel1.Height=Unit.Pixel(860);
                UpdatePanel1.Triggers.Add(new AsyncPostBackTrigger
                {
                    ControlID = imageButton.ID,
                    EventName = "imageButton_Click"
                });


            }
        }
        protected void imageButton_Click(object sender, ImageClickEventArgs fi)
        {

            testimage.ImageUrl = ((ImageButton)sender).ImageUrl;

        }



// In aspx file i am doing this.AMSPanel is just a panel control.

<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
      <ContentTemplate>
        <asp:Image ID="testimage" runat="server"  />
      </ContentTemplate>
</asp:UpdatePanel>


<ams:AMSPanel ID="AMSPanel1" CssClass="CustomWidth" runat="server" Width="130px" Height="700px" ScrollBars="Vertical"> 
</ams:AMSPanel>

3 个答案:

答案 0 :(得分:0)

为页面中唯一的ImageButton创建一个ID,并从后面的代码中将触发器添加到更新面板:

    // There are many possible strategies for generating IDs unique within the page. 
    //For example, based on an index corresponding to the current file record.
    var fileIdx = 0;
    foreach (string strfile in Directory.GetFiles(Server.MapPath("~/images")))
    {
        fileIdx++;
        ImageButton imageButton = new ImageButton(){ ID = "imageBtn" + fileIdx };
        FileInfo fi = new FileInfo(strfile);
        imageButton.ImageUrl = "~/images/" + fi.Name;
        imageButton.Height = Unit.Pixel(100);
        imageButton.Style.Add("padding", "5px");
        imageButton.Width = Unit.Pixel(100);
        imageButton.Click += new ImageClickEventHandler(imageButton_Click);
        AMSPanel1.Controls.Add(imageButton);
        AMSPanel1.Height=Unit.Pixel(860);

        UpdatePanel1.Triggers.Add(new AsyncPostBackTrigger { 
                                    ControlID = imageButton.ID
                                  });
    }

答案 1 :(得分:0)

您需要添加

Imagebutton.Name =&#34; some_name_here&#34 ;;

然后你可以用FindControl找到它(&#34; some_name_here&#34;)或者至少引用它

答案 2 :(得分:0)

我想帮忙,所以请耐心等待。

  1. &#34; Panel&#34;没有DataSource属性,与ListView相比。
  2. 当您点击一个imageButton时,页面会刷新(因为它的输入类型=图像&#34;),然后是&#34; Panel&#34;处理imageButtons,因此包括imageButtons_Click,即使你的.cs中有imageButtons_Click,我也怀疑aspx无法调用它。
  3. 我希望了解您项目中的真实目标,因为我对这个当前主题有两点建议。
    1. 面向服务器页面事件(纯asp.net): enter image description here 和我的。enter image description here
    2. 或jquery / javascript(没有ajax更新面板和imageButton_Click服务器代码隐藏)。首先只创建一个列表视图。 enter image description here 然后导入一个jquery库,并执行如下所示的脚本: enter image description here
  4. *注意:请注意我是如何使用CssClass =&#34; img-btn&#34;比ID =&#34; imgBtn&#34;拨打&#34;点击&#34;来自javascript?只是因为在HTML中呈现时ID会发生变化,请参见下图: enter image description here 这使得属性&#34; class&#34;比属性更容易访问&#34; ID&#34;。

    希望这些有帮助。干杯!