【问题标题】:C# Repeater dynamic ButtonC#Repeater 动态按钮
【发布时间】:2014-01-21 17:50:51
【问题描述】:

我正在使用中继器来生成按钮控件。

<asp:Repeater ID="rptDoc" runat="server">
<ItemTemplate>
<div style="...">
<asp:Button ID="btnUpload" runat="server" Text="Button" OnClick="button_Click" />
</div>
</ItemTemplate>
</asp:Repeater>

例如,我可以生成 4 个按钮。但是,我该如何实施 每个按钮里面的程序?

点击btnUpload1时,会将文件上传到Folder1, 点击btnUpload2时,会将文件上传到Folder2

我知道有一种方法可以在 Web 表单中创建表格,然后 动态地将生成的按钮放在表格单元格中......但我 有很多带有样式的 DIV,所以我不想使用表格 放置动态按钮。

感谢您的帮助。

【问题讨论】:

  • 如何确定哪个按钮重定向到哪个站点?为什么不使用hyperlink 并将href 设置为您想要的站点?
  • 我想为每个生成的控件添加 Attributes.Add("Tag", uploadFileID)
  • 这样,当按钮点击事件发生时,我可以获取标签并继续工作......
  • 以上链接只是一个例子,实际上我需要在按钮点击时确定上传路径,然后将文档上传到该文件夹​​中。
  • 这与重定向到一些随机网站完全不同。

标签: c# dynamic controls


【解决方案1】:

它现在对我有用,我使用 LinkBut​​ton 而不是 Button。 还在转发器中添加了 OnItemCommand="ItemCommand"。 最后,当 LinkBut​​ton 单击时,它将转到 ItemCommand 事件。 它从动态 LinkBut​​ton 中设置的 CommandArgument 获取值

<asp:Repeater ID="rpt" runat="server" OnItemCommand="ItemCommand">
<ItemTemplate>
<asp:LinkButton runat="server" CommandArgument='<%# Eval("lbtnUploadCommandArgument")%>' CommandName="ButtonEvent">Upload Files</asp:LinkButton>
</ItemTemplate>
</asp:Repeater>


protected void ItemCommand(Object Sender, RepeaterCommandEventArgs e)
{
string[] arr_Para = ((LinkButton)e.CommandSource).CommandArgument.Split(';');
}

【讨论】:

    【解决方案2】:

    当您将按钮动态添加到 Web 表单时,您可以跟踪每个按钮应执行的操作,然后在常见的点击事件中处理该 URL,如下面的骇人听闻的示例。

    Dictionary<System.Web.UI.WebControls.Button, string> ButtonToURIMap = new Dictionary<System.Web.UI.WebControls.Button, string>();
    private void AddButtonToForm()
    {
        System.Web.UI.WebControls.Button myWebButton = new System.Web.UI.WebControls.Button();
        //Initialize/Style your button here.
        myWebButton.Click +=myWebButton_Click;
        ButtonToURIMap.Add(myWebButton, "http://www.google.com/");
    }
    
    void myWebButton_Click(object sender, EventArgs e)
    {
        if (sender is System.Web.UI.WebControls.Button)
        {
            System.Web.UI.WebControls.Button callingButton = (System.Web.UI.WebControls.Button)sender;
            if ( ButtonToURIMap.ContainsKey(callingButton))
            {
                string uri = ButtonToURIMap[callingButton];
                //code you execute from here
            }
        }
    }
    

    【讨论】:

      【解决方案3】:

      你需要的都在下面。

      在您的代码隐藏中

      Protected Sub MyPointsRepeater_RowCommand(sender As Object, e As System.Web.UI.WebControls.RepeaterCommandEventArgs) Handles MyPointRepeater.ItemCommand
          arg = e.CommandArgument.ToString().Split(";"c)
      End Sub
      

      在您的 Aspx 页面中

      <asp:Repeater ID="MyPointRepeater" runat="server">
      <ItemTemplate>
      
      <label class="ConferenceName"><%#Eval("Conference Name").ToString()%></label><br />
      <label class="RegistrationId"><%#Eval("CPD Points / Hours").Tostring() %></label>
      <label class="Type"><%#Eval("Type").ToString()%></label>
      
      <asp:LinkButton ID="lnkCustomize" Text="Download Certificate"  CommandName="Customize" CssClass="fontLight"
                          CommandArgument='<%#Eval("R_Id").Tostring() + ";" + Eval("Conf_Id").Tostring() + ";" + Eval("Reg Id").Tostring() + ";" + Eval("CPD Points / Hours").Tostring() + ";" + Eval("Type").Tostring()%>'  runat="server" /> 
      
      </ItemTemplate>
      </asp:Repeater>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-10-30
        • 2018-12-06
        • 2017-02-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多