我正在用 ASP.NET 编写一个网页。我有一些 JavaScript 代码,我有一个带有点击事件的提交按钮。
是否可以使用 JavaScript 的单击事件调用我在 ASP 中创建的方法?
我正在用 ASP.NET 编写一个网页。我有一些 JavaScript 代码,我有一个带有点击事件的提交按钮。
是否可以使用 JavaScript 的单击事件调用我在 ASP 中创建的方法?
好吧,如果您不想使用 Ajax 或任何其他方式来执行此操作,而只想进行正常的 ASP.NET 回发,那么您可以这样做(不使用任何其他库):
虽然有点棘手... :)
一世。在您的代码文件中(假设您使用的是 C# 和 .NET 2.0 或更高版本)将以下接口添加到您的 Page 类中,使其看起来像
public partial class Default : System.Web.UI.Page, IPostBackEventHandler{}
ii. 这应该添加(使用Tab- Tab)这个函数到你的代码文件中:
public void RaisePostBackEvent(string eventArgument) { }
三、在 JavaScript 中的 onclick 事件中,编写以下代码:
var pageId = '<%= Page.ClientID %>';
__doPostBack(pageId, argumentString);
这将调用代码文件中的“RaisePostBackEvent”方法,并将“eventArgument”作为从 JavaScript 传递的“argumentString”。现在,您可以调用您喜欢的任何其他事件。
PS:那是“下划线-下划线-doPostBack”......而且,该序列中不应该有空格......不知何故WMD不允许我写下划线后跟一个字符!
该__doPostBack()
方法效果很好。
另一种解决方案(非常骇人听闻)是简单地在您的标记中添加一个不可见的 ASP 按钮,然后使用 JavaScript 方法单击它。
<div style="display: none;">
<asp:Button runat="server" ... OnClick="ButtonClickHandlerMethod" />
</div>
从您的 JavaScript 中,使用其ClientID检索对按钮的引用,然后对其调用.click()方法。
var button = document.getElementById(/* button client id */);
button.click();
在微软AJAX库将做到这一点。您还可以创建自己的解决方案,该解决方案涉及使用 AJAX 调用您自己的 aspx(基本上)脚本文件来运行 .NET 函数。
我建议使用 Microsoft AJAX 库。安装并引用后,您只需在页面加载或初始化中添加一行:
Ajax.Utility.RegisterTypeForAjax(GetType(YOURPAGECLASSNAME))
然后,您可以执行以下操作:
<Ajax.AjaxMethod()> _
Public Function Get5() AS Integer
Return 5
End Function
然后,您可以在您的页面上调用它:
PageClassName.Get5(javascriptCallbackFunction);
函数调用的最后一个参数必须是返回 AJAX 请求时将执行的 javascript 回调函数。
我认为博客文章How to fetch & show SQL Server database data in ASP.NET page using Ajax (jQuery)会对你有所帮助。
JavaScript 代码
<script src="http://code.jquery.com/jquery-3.3.1.js" />
<script language="javascript" type="text/javascript">
function GetCompanies() {
$("#UpdatePanel").html("<div style='text-align:center; background-color:yellow; border:1px solid red; padding:3px; width:200px'>Please Wait...</div>");
$.ajax({
type: "POST",
url: "Default.aspx/GetCompanies",
data: "{}",
dataType: "json",
contentType: "application/json; charset=utf-8",
success: OnSuccess,
error: OnError
});
}
function OnSuccess(data) {
var TableContent = "<table border='0'>" +
"<tr>" +
"<td>Rank</td>" +
"<td>Company Name</td>" +
"<td>Revenue</td>" +
"<td>Industry</td>" +
"</tr>";
for (var i = 0; i < data.d.length; i++) {
TableContent += "<tr>" +
"<td>"+ data.d[i].Rank +"</td>" +
"<td>"+data.d[i].CompanyName+"</td>" +
"<td>"+data.d[i].Revenue+"</td>" +
"<td>"+data.d[i].Industry+"</td>" +
"</tr>";
}
TableContent += "</table>";
$("#UpdatePanel").html(TableContent);
}
function OnError(data) {
}
</script>
ASP.NET 服务器端功能
[WebMethod]
[ScriptMethod(ResponseFormat= ResponseFormat.Json)]
public static List<TopCompany> GetCompanies()
{
System.Threading.Thread.Sleep(5000);
List<TopCompany> allCompany = new List<TopCompany>();
using (MyDatabaseEntities dc = new MyDatabaseEntities())
{
allCompany = dc.TopCompanies.ToList();
}
return allCompany;
}