【问题标题】:Add click event to dynamic button inside calendar将点击事件添加到日历内的动态按钮
【发布时间】:2018-10-31 04:49:21
【问题描述】:

我的网站中有一个日历控件(asp.net 中的 vb.net)(标准日历控件,但我对其进行了操作,现在它看起来像 Outlook 日历)

事件作为动态按钮添加到日历中,每个按钮都有唯一的 ID 即使在回发之后也是相同的。

这是我生成按钮并将其添加到日历中相应单元格的代码:

Protected Sub Calendar1_DayRender(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DayRenderEventArgs) Handles Calendar1.DayRender

Dim nextDate As DateTime
    If Not dsHearings Is Nothing Then
        For Each dr As DataRow In dsHearings.Tables(0).Rows
            nextDate = CType(dr(6), DateTime)
            If nextDate = e.Day.Date Then
                e.Cell.BackColor = System.Drawing.Color.LightGoldenrodYellow
                Dim btn As New Button
                btn.Text = Left(dr(7).ToString, 5) & "-" & "جلسة في ملف" & dr(1) & " " & dr(2) & " (" & dr(8) & ")"
                btn.CssClass = "CalendarHearingEvent"
                btn.BackColor = Drawing.Color.Red
                btn.ToolTip = "جلسة في ملف" & dr(1) & " " & dr(2) & " (" & dr(8) & ")"
                btn.ID = "btnHearings" & dr(9).ToString
                btn.UseSubmitBehavior = True
                AddHandler btn.Click, AddressOf Me.HearingButton_Click

                Dim lbl As New Label
                lbl.Text = "<br>"
                e.Cell.Controls.Add(lbl)
                e.Cell.Controls.Add(btn)

            End If
        Next
    End If

这是处理子:

Private Sub HearingButton_Click(sender As Object, e As EventArgs)

End Sub

一切都很完美,但是点击事件没有触发

请帮忙

【问题讨论】:

  • 我认为你不需要Me
  • 请有任何想法!!!!

标签: asp.net vb.net dynamic event-handling click


【解决方案1】:

我使用了LinkBut​​ton,并将链接按钮的href属性设置为

lnkBut​​ton.Attributes("href") = e.SelectUrl

代码

lnkButton = New LinkButton()
lnkButton.CommandArgument = objScheduleDetail.SelectedDate
lnkButton.Text = <Write your text here>
lnkButton.ID = "lnkView" ' you can make it unique as well
lnkButton.Attributes("href") = e.SelectUrl
e.Cell.Controls.Add(lnkButton)

现在,当单击此链接按钮时,会触发 Calendar.SelectionChanged 事件。我使用 Calendar1.SelectedDate 来获取点击按钮的日期。

Protected Sub Calendar1_SelectionChanged(sender As Object, e As System.EventArgs) Handles Calendar1.SelectionChanged


   Calendar1.SelectedDate ' date which is clicked.

End Sub

【讨论】:

    【解决方案2】:

    感谢 的回答,但我还需要传递参数。所以我用你的答案和额外的代码来满足我的应用程序的需求。
    问题是,当单击日历内的动态按钮时,它会发回日历事件而不是按钮单击事件,因此应用程序没有捕获按钮。 为了绕过它,在我后面的代码中,我生成了一个这样的链接按钮:

    Dim btn As New LinkButton
    btn.Text = "Text On LinkButton"
    btn.CssClass = "CalendarEvent"
    btn.ToolTip = "What ever"
    btn.ID = "LinkButton1"
    Dim str As String = "return EventonMyClientClick(" + dr(0).ToString + ");"
    btn.OnClientClick = str
    e.Cell.Controls.Add(btn)
    

    这将在日历单元格内生成一个链接按钮,其中 OnClientClick 指向 HTML 代码中的 javascript 函数,如下所示:

     <asp:LinkButton ID="LinkButton1" style="display:none;" runat="server" onclick="LinkButton1_Click">LinkButton</asp:LinkButton>
     <asp:HiddenField ID="hdEventSentId" runat="server" />
     <script>
        function EventonMyClientClick(val) {
    
            document.getElementById('<%=hdEventSentId.ClientID%>').value = val;
            var btn = document.getElementById('<%=LinkButton1.ClientID%>');
            btn.click();
        }
    
     </script>
    

    如您所见,动态链接按钮将我的参数 (dr(0).ToString) 传递给 函数。该函数获取参数,将其保存在隐藏字段中,然后为 链接按钮执行单击事件。
    页面回发并捕获 click 事件,该事件调用链接按钮的处理程序背后的代码,该处理程序处理保存在隐藏字段中的参数:

    Protected Sub LinkButton1_Click(sender As Object, e As EventArgs)
        Try
            Dim EventId As String = hdEventSentId.Value
            ....
            Catch ex As Exception
    
        End Try
    
    End Sub
    

    我希望这将帮助其他寻求解决相同问题的人。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-08
      • 1970-01-01
      相关资源
      最近更新 更多