从 JavaScript 调用 ASP.NET 函数?

IT技术 javascript c# asp.net onclick
2021-01-25 02:38:27

我正在用 ASP.NET 编写一个网页。我有一些 JavaScript 代码,我有一个带有点击事件的提交按钮。

是否可以使用 JavaScript 的单击事件调用我在 ASP 中创建的方法?

6个回答

好吧,如果您不想使用 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不允许我写下划线后跟一个字符!

我正在尝试实现这一点,但它无法正常工作。该页面正在回发,但我的代码没有得到执行。当我调试页面时,RaisePostBackEvent 永远不会被触发。我做的不同的一件事是我在用户控件而不是 aspx 页面中执行此操作。
2021-03-19 02:38:27
它给了我一个错误说对象预期。我这样称呼它:window.onbeforeunload = confirmExit; //debugger; function confirmExit() { var pageId = '<%= Page.ClientID %>'; var argumentString = 'ReleaseLock'; __doPostBack(pageId, argumentString); }
2021-03-26 02:38:27
无论出于何种原因,我都无法让它与onkeyup事件一起工作得到了JavaScript runtime error: '__doPostBack' is undefined我使用 C# 和 ASP.NET 2.0。
2021-03-31 02:38:27

__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();
2021-03-13 02:38:27
@Kubi 服务器端的一个参数?我通常做的是将需要发送到服务器端的参数序列化,并将它们放在一个隐藏字段中。
2021-03-16 02:38:27
@saher 是的,但它实际上是.click(小写 c)(comptechdoc.org/independent/web/cgi/javamanual/javabutton.html
2021-03-20 02:38:27
Click方法存在吗??
2021-03-22 02:38:27
如果我想使用参数怎么办?我可以从客户端获取它并与 button.Click() 一起使用吗?
2021-04-09 02:38:27

微软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 回调函数。

您可以使用 .NET Ajax PageMethods 异步执行此操作。请参阅此处此处

我认为博客文章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;
}