在我的项目中,有3个用户控件; BasicContact,BasicDetail和ActionTime。它们位于EditOrder.aspx页面中。从javascript(VB.NET)执行代码隐藏函数/子程序
有一个在BasicContact “ReportDate” 属性(日期型),单选按钮列表 “rdl_Priority”(与来自 “prio_id” 字段的整数值)的BasicDetail和ActionTime “了checkdate” 属性。 ReportDate值来源于txt_ReportDate,txt_ReportTime和CheckDate值来源于txt_CheckDate和txt_CheckTime。
我的目标是在将日期添加到ReportDate并单击radiobuttonlist后计算Checkdate。 Checkdate将根据ReportDate(日期)+ SLAHour(小时,从输入为prio_id的“GetSLAHour”方法获得)计算,然后在txt_CheckDate和txt_CheckTime中设置文本。
现在,我可以使用Postback完成此任务。我创建自定义事件并在RadioButtonList selectedIndexchanged方法中引发它。之后,在EditOrder页面后面的代码中处理事件。这是我的代码。
BasicDetail - 单选按钮列表
<asp:RadioButtonList ID="rdl_Priority" runat="server" RepeatDirection="Horizontal" AutoPostBack="true" />
BasicDetail - 代码隐藏
Public Event priorityClicked As System.EventHandler
Private Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Init
If Not IsPostBack Then SetupList()
End Sub
Private Sub SetupList()
Dim ctx As New StsDataContext
With rdl_Priority
Dim Result = (From r In ctx.Priorities Order By r.display_order)
If Result.Count > 0 Then
.DataTextField = "prio_name"
.DataValueField = "prio_id"
.DataSource = Result
.DataBind()
Else
lbl_Priority.Visible = False
rdl_Priority.Visible = False
End If
End With
End Sub
Protected Sub rdl_Priority_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles rdl_Priority.SelectedIndexChanged
RaiseEvent priorityClicked(sender, e)
End Sub
EditOrder - 代码隐藏
Private Sub BasicDetail_priorityClicked(ByVal sender As Object, ByVal e As System.EventArgs) Handles BasicDetail.priorityClicked
Dim reportDate As Date? = BasicContact.ReportDate
Dim SLAHour As Integer? = GetSLAHour(BasicDetail.PriorityId)
If reportDate.HasValue AndAlso SLAHour.HasValue Then
ActionTime.CheckDate = CDate(reportDate).AddHours(CDbl(SLAHour))
End If
End Sub
不过,我不希望页面被刷新(无回传) 。我不知道如何从JavaScript调用函数或子。我已经尝试过PageMethod,但是它在运行时会导致错误,说该方法不受支持。无论如何,如果有比从javascript调用代码隐藏更好的方法,请让我知道。
在此先感谢
啊好吧,我现在使用UpdatePanel解决了这个问题。但我不确定这是否会影响程序中的其他功能。 –
最后,我可以使用比UpdatePanel更好的PageMethod来解决问题。也许我在开始时误用了它,导致错误(之前我把它放在用户控件中,现在我把它移到了EditOrder页面)。 –
你应该详细说明你的解决方案,作为你自己问题的答案。除了少量的代表之外,它使得整个帖子对于下一个看到类似内容的人更有用。 – CJM