В моем проекте есть 3 пользовательских элемента управления; BasicContact, BasicDetail и ActionTime. Они находятся на странице EditOrder.aspx.Выполнение функции кода/Sub из javascript (VB.NET)
Свойство «ReportDate» (тип даты) в BasicContact, RadioButtonList «rdl_Priority» (с целым значением из поля «prio_id») в BasicDetail и свойство «CheckDate» в ActionTime. Значение ReportDate выводится из txt_ReportDate и txt_ReportTime, а значение CheckDate выводится из txt_CheckDate и txt_CheckTime.
Моя цель - рассчитать Checkdate после добавления даты в ReportDate и нажать на radioobuttonlist. Checkdate будет вычисляться из ReportDate (date) + SLAHour (час, получить от метода GetSLAHour, где вход prio_id), а затем установить текст в txt_CheckDate и txt_CheckTime.
Прямо сейчас, я смог выполнить эту задачу, используя Postback. Я создаю собственное событие и подниму его в методе RadioButtonList selectedIndexchanged. После этого событие обрабатывается в коде позади страницы EditOrder. Вот мой код. не
BasicDetail - RadioButtonList
<asp:RadioButtonList ID="rdl_Priority" runat="server" RepeatDirection="Horizontal" AutoPostBack="true" />
BasicDetail - CodeBehind
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 - CodeBehind
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
Однако, я не хочу страницу, которая будет обновляться (не постбэк) , Я не знаю, как вызвать функцию или sub из javascript. Я попробовал PageMethod, но это вызвало ошибку во время выполнения, заявив, что метод не поддерживается. Во всяком случае, если есть лучший способ, чем вызов кода из javascript, пожалуйста, дайте мне знать.
Заранее спасибо
Ah Ну, я решил проблему теперь с помощью UpdatePanel. Но я не уверен, влияет ли это на другие функции программы. –
Наконец, я смог решить проблему, используя PageMethod, который лучше, чем UpdatePanel. Возможно, я неправильно использовал его в начале, чтобы он вызывал ошибку (до этого я поместил ее в пользовательский элемент управления, а теперь переместил ее на страницу EditOrder). –
Вы должны * подробно * ваше решение в качестве ответа на свой вопрос. В дополнение к небольшому количеству репутации, это делает весь этот пост более полезным для следующего парня, который смотрит на что-то подобное. – CJM