从 javascript 执行代码隐藏函数/子 (VB.NET)
Perform code-behind Function/Sub from javascript (VB.NET)
在我的项目中,有 3 个用户控件;BasicContact,BasicDetail和ActionTime。它们位于 EditOrder.aspx 页面中。
BasicContact中有"ReportDate"属性(日期类型),BasicDetail中有RadioButtonList"rdl_Priority"(带有"prio_id"字段中的整数值),ActionTime中有"CheckDate"属性。"报告日期"值派生自txt_ReportDate和txt_ReportTime,"检查日期"值派生自txt_CheckDate和txt_CheckTime。
我的目标是在将日期添加到报告日期并单击单选按钮列表后计算检查日期。Checkdate将从ReportDate(日期)+ SLAHour(小时,从输入prio_id的"GetSLAHour"方法获取)计算,然后以txt_CheckDate和txt_CheckTime设置文本。
现在,我能够使用回发完成此任务。我创建自定义事件并在单选按钮列表中选择索引更改方法中引发它。之后,事件在 EditOrder 页面的代码后面处理。这是我的代码。
基本详细信息 - 单选按钮列表
<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
编辑顺序 - 代码隐藏
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调用函数或sub。我已经尝试过PageMethod,但它在运行时导致错误,指出该方法不受支持。无论如何,如果有比从javascript调用代码隐藏更好的方法,请告诉我。
提前致谢
好的对不起,这是我的解决方案
由于现在我使用 PageMethod 来解决这个问题,我不再需要从代码后面引发事件函数,所以我删除了我发布的所有代码来提出我自己的问题。
首先,我在 BasicDetail 代码隐藏中的 RadioButtonList 中的每个项目中添加了 javascript 函数。
基本细节 - 代码隐藏
Private Sub rdl_Priority_DataBound(ByVal sender As Object, ByVal e As System.EventArgs) Handles rdl_Priority.DataBound
For Each li As ListItem In rdl_Priority.Items
Dim slaHour As Integer? = GetSLAHour(li.Value)
li.Attributes.Add("onclick", "return CalCheckDate(" & If(slaHour.HasValue, CStr(slaHour), "null") & ");")
Next
End Sub
添加到每个按钮的"CalCheckDate"函数在EditOrder页(用户控件的父页)中实现
编辑顺序.aspx
<script type="text/javascript">
function CalCheckDate(hour) {
var hid_ServId = document.getElementById('<%=hid_ServId.ClientID%>');
var txt_reportDate = document.getElementById('<%=BasicContact.ReportDateTextName%>');
var txt_reportTime = document.getElementById('<%=BasicContact.ReportTimeTextName%>');
PageMethods.GetCheckDateTime(hid_ServId.value, txt_reportDate.value, txt_reportTime.value, hour, OnGetCheckDateComplete, OnGetCheckDateError);
}
function OnGetCheckDateComplete(result) {
var txt_checkDate = document.getElementById('<%=ActionTime.CheckDateTextName%>');
var txt_checkTime = document.getElementById('<%=ActionTime.CheckTimeTextName%>');
var chkDateTime = result.split(" ");
txt_checkDate.value = chkDateTime[0];
txt_checkTime.value = chkDateTime[1];
}
function OnGetCheckDateError(e)
{
alert(e._message);
}
</script>
用户控件中的子控件(如 BasicContact 中的txt_ReportDate)可以通过在 BasicContact 中创建属性来派生,如下所示:
基本联系人 - 代码隐藏
Public ReadOnly Property ReportDateTextName() As String
Get
Return txt_ReportDate.ClientID
End Get
End Property
此属性在"CalCheckDate"函数中用于获取其值并将其传递给PageMethod函数。其他控件可以以相同的方式派生。
最后一步是在 EditOrder 代码中编写 PageMethods 函数"GetCheckDateTime"
编辑顺序 - 代码隐藏
<System.Web.Services.WebMethod()> _
Public Shared Function GetCheckDateTime(ByVal servId As String, ByVal ReportDate As String, ByVal ReportTime As String, ByVal hour As String) As String
Dim checkDate As String, checkTime As String
'************************************************************************
'Calculate check and time date from input ReportDate, ReportTime and hour
'************************************************************************
Return checkDate & " " & checkTime
End Function
结果返回到javascript中的"OnGetCheckDateComplete"函数(如果有异常,则返回"OnGetCheckDateError")。在这里,我拆分字符串并使用其值在文本框中设置文本。
- 将数据从javascript文件导入VB.Net页面
- VB NET JQUERY AJAX上出现错误500
- Calling VB.Net from Javascript
- 如何从vb.net中的页面加载事件中调用特定的javascript函数
- 通过vb.net使用javascript
- 在 Javascript 中使用 C#/VB.NET 值
- 在代码后面从window.confirm中检索值.[VB.net]
- 试图在vb.net codebehind中获取javascript变量
- VB.NET-WebBrowser没有't在html源代码中显示javascript创建的html元素
- 在VB.net/C#或Objective-C上将JPEG或PNG转换为SVG格式
- 单击按钮后需要jQuery方法重定向-ASP.NET、VB.NET、jQuery、Javascript
- 使用Asp.net(VB.net)或Javascript将条形码生成为PDF文档
- 谷歌地图-来自VB.Net的JSON对象标记
- JS Websocket卡在连接TCPListener-VB.net的状态
- 如何将文本框中的值存储到 asp.net vb.net 应用程序中的 JavaScript 变量中
- VB.net 使用Ajaxcall的文件上传
- 从 vb.net 关闭脚本弹出窗口
- 使用 JavaScript 将变量值从 aspx 页传递到 VB.net 页
- 从 vb.net 程序调用 Google Chrome 窗口中的 JavaScript 函数
- 如何从 vb.net 中的 ASPX.vb 页调用 WebMethod