从JavaScript调用ASP.NET函数?

时间:2020-03-05 18:38:05  来源:igfitidea点击:

我正在用ASP.NET编写网页。我有一些JavaScript代码,并且有一个带有click事件的Submit按钮。

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

解决方案

回答

我们可以使用.NET Ajax PageMethods异步进行此操作。看到这里或者这里。

回答

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

回答

好吧,如果我们不想使用Ajax或者任何其他方式来执行此操作,而只希望进行正常的ASP.NET回发,则可以按以下步骤进行(不使用任何其他库):

虽然有点棘手... :)

一世。在代码文件中(假设我们使用的是Cand .NET 2.0或者更高版本),将以下Interface添加到Page类中,以使其看起来像

public partial class Default : System.Web.UI.Page, IPostBackEventHandler{}

ii。这应该将该功能(使用Tab-Tab)添加到代码文件中:

public void RaisePostBackEvent(string eventArgument) { }

iii。在JavaScript的onclick事件中,编写以下代码:

var pageId = '<%=  Page.ClientID %>';
__doPostBack(pageId, argumentString);

这将在代码文件中调用" RaisePostBackEvent"方法,并将" eventArgument"作为我们从JavaScript传递的" argumentString"。现在,我们可以拨打自己喜欢的其他任何事件。

附言:那是'underscore-underscore-doPostBack'...而且,这个顺序应该没有空格...不知何故,WMD不允许我写下划线,后面跟一个字符!

回答

我们可能想为常用方法创建一个Web服务。
只需在要调用的函数上添加WebMethodAttribute就可以了。
拥有所有常用内容的Web服务也使系统易于维护。

回答

__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();

回答

The Microsoft AJAX library will accomplish this. You could also create your own solution that involves using AJAX to call your own aspx (as basically) script files to run .NET functions.

这是一个名为AjaxPro的库,它被编写为名为Michael Schwarz的MVP。该库不是由Microsoft编写的。

我已经广泛使用了AjaxPro,它是一个非常不错的库,建议对服务器进行简单的回调。它在Microsoft版本的Ajax上运行良好,没有任何问题。但是,我要指出的是,微软使Ajax变得多么容易,我只会在确实需要时才使用它。只需将JavaScript放到更新面板中就可以完成从Microsoft获得的一些非常复杂的功能,这需要大量的JavaScript。

回答

感谢跨浏览器,此回复对我来说像是轻轻松松:

The __doPostBack() method works well.

另一个解决方案(非常骇人听闻)是在标记中添加一个不可见的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();
Blockquote

回答

如果未在页面上生成__doPostBack函数,则需要插入一个控件以强制执行以下操作:

<asp:Button ID="btnJavascript" runat="server" UseSubmitBehavior="false" />