使用 ajax 调用代码隐藏函数
Call a code-behind function with ajax?
搜索了一下,找不到明确的答案。
我有一个大的HTML表格,里面有数字。我有一个选择器(单选按钮列表(,如果用户想以 $ 或天为单位查看表格,可以单击它。
现在它运行良好,但页面刷新,因为每次用户单击两个单选按钮之一时,我都会调用代码隐藏函数 (RefreshTable(,因为它会更改格式并需要由 RefreshTable 函数完成的新计算
.有什么方法可以在不使用 ajax 或其他东西刷新页面的情况下调用该函数?该函数只有一个参数:ProjectID,它是用 VB.NET 编码的,我们正在使用 ASP.NET
下面是 中的表代码。ASPX 页面,它只是 shell,所有内容都是通过更改 RadioButton 时调用的 VB.NET 方法添加的(autopostback=true(,因此我们检查是否选择了 1 并执行 VB.NET 方法来填充表。 (函数代码如下(
注意:更改了一些列''VAR名称,因为它是敏感信息,但您可以了解大局。
<td>
<asp:RadioButtonList RepeatDirection="Horizontal" id="rdiolist" onclick="alert('hello');" runat="server" RepeatLayout="flow" AutoPostBack="true">
<asp:ListItem selected="true"> $ </asp:ListItem>
<asp:ListItem> Days </asp:ListItem>
</asp:RadioButtonList>
</td>
</tr>
</table>
<br />
<table id="tblBudgetRessourceVP" runat="server" class="ProjetTable ProjetTableHover">
<thead>
<tr>
<th style="width:80px">COLUMN 1</th>
<th style="width:120px">COLUMN 2/th>
<th style="width:120px">COLUMN 3</th>
<th style="width:120px">COLUMN 4</th>
<th style="width:120px">COLUMN 5</th>
<th style="width:120px">COLUMN 6</th>
<th style="width:120px">COLUMN 7</th>
<th style="width:120px">COLUMN 8</th>
</tr>
</thead>
</table>
代码隐藏方法,这就是我想在没有回发的情况下调用的方法,我们希望删除每个页面刷新。我将只发布该函数的一个示例,因为它非常重复,因为它对每一列都这样做。我用随机名称替换了一些变量名称,因为它是非常敏感的数据。
Private Sub FillTable(ByVal vProjetID As String)
Dim sqlquery As String = "SELECT SUM(EFFORT_RESRC.NB_JP_PLANF) as Planifie, SUM(EFFORT_RESRC.NB_JP_DDC) as DDC, SUM(EFFORT_RESRC.NB_JP_REEL) as Reel, SUM(EFFORT_RESRC.NB_JP_RESTN) as RAF, " & _
"SUM(EFFORT_RESRC.NB_JP_REVS) as Revise, SUM(EFFORT_RESRC.NB_JP_PROJT) as Projete, SUM(EFFORT_RESRC.ECART_REVS_PROJT) as Ecart,RESRC.ID_VP , VICE_PRESD.DE_VP, TA_COMPS.TAUX " & _
"FROM EFFORT_RESRC INNER JOIN " & _
"TA_COMPS ON EFFORT_RESRC.COMPOSANTEID = TA_COMPS.COMPOSANTEID INNER JOIN " & _
"RESRC ON EFFORT_RESRC.NO_EMPLY = RESRC.NO_EMPLY INNER JOIN " & _
"VICE_PRESD ON RESRC.ID_VP = VICE_PRESD.ID_VP " & _
"WHERE EFFORT_RESRC.PROJETID = '" & vProjetID & "' AND EFFORT_RESRC.ANNEE = '" & dd_ressourceprojet_annee.SelectedValue & "' AND TA_COMPS.ANNEE = '" & dd_ressourceprojet_annee.SelectedValue & "' " & _
"GROUP BY RESRC.ID_VP, VICE_PRESD.DE_VP, TA_COMPS.TAUX " & _
"ORDER BY VICE_PRESD.DE_VP"
Dim dtRessource As New DataTable
Master.GetDataTable(dtRessource, sqlquery)
While (tblBudgetRessourceVP.Rows.Count > 1)
tblBudgetRessourceVP.Rows.RemoveAt(1)
End While
Dim tr As HtmlTableRow
Dim td As HtmlTableCell
For Each ressource As DataRow In dtRessource.Rows
If ressource("DE_VP") <> curStrVP And curStrVP <> String.Empty Then
tr = New HtmlTableRow
td = New HtmlTableCell
td.InnerHtml = curStrVP
tr.Cells.Add(td)
td = New HtmlTableCell
td.Attributes.Add("class", "budget")
If rdiolist.SelectedIndex = 0 Then // Check the selector, if $ or Days display
td.InnerHtml = Format(curPlan, "### ### ### ### ### ##0.00$")
Else
td.InnerHtml = Format(curPlan, "####")
End If
totPlan += curPlan
tr.Cells.Add(td) // Add the cell to the table.
td = New HtmlTableCell
td.Attributes.Add("class", "budget")
If rdiolist.SelectedIndex = 0 Then // Check if JP or $ is selected for display format.
td.InnerHtml = Format(curDDC, "### ### ### ### ### ##0.00$")
Else
td.InnerHtml = Format(curDDC, "####")
End if
totDDC += curDDC
tr.Cells.Add(td)
td = New HtmlTableCell
td.Attributes.Add("class", "budget")
If rdiolist.SelectedIndex = 0 Then // Check if JP or $ is selected for display format.
td.InnerHtml = Format(curRevise, "### ### ### ### ### ##0.00$")
Else
td.InnerHtml = Format(curRevise, "####")
End If
totRevise += curRevise
tr.Cells.Add(td)
谢谢大家。
我回答的时间有点延迟,因为从那以后我就没有碰过 VB
。现在假设您有一个div(可以是按钮或任何 html 元素(,单击它时要从服务器获取数据而无需进行完整回发。以下是 HTML 设置。
<div id="click">click</div>
<div id="dvTest"></div>
<script src="Scripts/jquery-1.4.1.min.js" type="text/javascript"></script>
<script src="Scripts/json2.js" type="text/javascript"></script>
以下是我们将使用的 jquery 代码:
<script type="text/javascript">
$(function () {
$("#click").click(function () {
var o = new Object();
o.ProjectId = 1;
var x = JSON.stringify(o);
$.ajax({
url: 'Default.aspx/GetData',
type: 'POST',
dataType: 'JSON',
contentType: 'application/json;charset=utf-8;',
data: x,
success: function (data) {
data = JSON.parse(data);
var d=data.hasOwnProperty("d") ? data.d : data;
//as we are returning fully rendered table
//we can directly set html of container div
$("#dvTest").html(d);
},
error: function (a, b, c) {
alert(b);
}
});
});
});
</script>
这是您需要在代码隐藏文件 (aspx.vb 文件中编写的内容。这种用WebMethod
属性修饰的public shared
方法称为 PageMethod
。现在HtmlTable
对象无法自动序列化,我们需要使用HtmlWriter
将其呈现为StringBuilder
并将完整的 HTML 返回到客户端:
<WebMethod()>
Public Shared Function GetData(ByVal ProjectId As String) As String
Dim tbl As New HtmlTable
Dim tr As HtmlTableRow
Dim td As HtmlTableCell
'instead of these loops you will polulate table rows/cells
'based on the data returned in your data table
For I As Integer = 1 To 5
tr = New HtmlTableRow
For j As Integer = 1 To 5
td = New HtmlTableCell
td.InnerHtml = "Cell " & I & j
tr.Cells.Add(td)
Next
tbl.Rows.Add(tr)
Next
Dim sb As New StringBuilder
Dim sr As New StringWriter(sb)
Dim hr As New HtmlTextWriter(sr)
tbl.RenderControl(hr)
Return sb.ToString()
End Function
编辑:- ASP.Net 通过序列化.Net对象返回JSON对象。但是这种方法不适用于HtmlTable
对象,因为它们没有实现InnerHTML
并且在那里抛出异常。
使用 AJAX,您可以创建一个泛型处理程序(假设您使用的是 VS 2008 或更高版本(。 泛型处理程序将具有.ashx
扩展,而不是.aspx
扩展。 从本质上讲,它允许您控制输出,而 Web 窗体.aspx
具有 UI 组件和代码隐藏。 .ashx
文件基本上是空白的,其中包含对代码隐藏的引用。 在代码隐藏中,您可以编写所需的代码,输出 AJAX 响应所需的输出内容。
- 从var向代码隐藏函数传递值
- javascript函数和代码隐藏函数的执行顺序
- 使用Javascript的多显示隐藏函数
- jQuery隐藏函数与“;按钮“;以及“;span”;但不是用“;a“;要素
- jQuery隐藏函数出现问题
- 带有隐藏函数的AngularJS自定义指令
- Jquery隐藏函数不起作用
- 如何在document.ready(function)时运行隐藏函数和动画
- 使用 JavaScript 访问隐藏函数
- 从 javascript 执行代码隐藏函数/子 (VB.NET)
- 使用 Jquery 显示和隐藏函数
- 使用 ajax 调用代码隐藏函数
- JavaScript 显示隐藏函数布局问题火狐浏览器
- 如何使用源映射从转译的代码中隐藏函数调用
- 如何使用 js 显示/隐藏函数内的标记
- 隐藏函数 other 中的复选框,并禁用所有元素以禁用复选框
- 从 JavaScript 调用代码隐藏函数,该函数可能会返回另一个 JavaScript 函数
- 如何使用java脚本函数中的参数调用代码隐藏函数
- 如何从asp.net代码隐藏函数中调用javascript函数
- 带有隐藏函数的JavaScript扩展类