从JavaScript调用ASP.NET函数?

我正在ASP.NET中编写一个网页。我有一些JavaScript代码,并且我有一个提交按钮和一个点击事件。

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

0
额外 编辑
意见: 3
你应该使用一些Ajax库: Anthem
额外 作者 jdecuyper,

6 答案

Microsoft AJAX库将完成此操作。您也可以创建自己的解决方案,包括使用AJAX调用自己的aspx(基本上)脚本文件来运行.NET函数。

我建议微软的AJAX库。一旦安装并引用,您只需在页面加载或init中添加一行:

Ajax.Utility.RegisterTypeForAjax(GetType(YOURPAGECLASSNAME))

然后你可以做这样的事情:

 _
Public Function Get5() AS Integer
    Return 5
End Function

然后,你可以在你的页面上调用它:

PageClassName.Get5(javascriptCallbackFunction);

函数调用的最后一个参数必须是返回AJAX请求时将执行的JavaScript回调函数。

0
额外

那么,如果你不想使用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) { }

III。在JavaScript中的onclick事件中,编写下面的代码:

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

这将在你的代码文件中使用'eventArgument'作为你从JavaScript传递的'argumentString'来调用'RaisePostBackEvent'方法。现在,你可以打电话给你喜欢的任何其他事件。

P.S:这是'underscore-underscore-doPostBack'...而且,在这个序列中应该没有空间......不知怎的,WMD不允许我写下一个字符后面的下划线!

0
额外
我试图实现这一点,但它不正确。该页面发回,但我的代码没有得到执行。当我调试页面时,RaisePostBackEvent永远不会被解雇。有一件事我做的不同是我在用户控件而不是aspx页面中执行此操作。
额外 作者 merk,
它表示对象预期会给我一个错误。我用这种方式调用它: window.onbeforeunload = confirmExit; //调试;函数confirmExit(){var pageId ='<�%= Page.ClientID%>'; var argumentString ='ReleaseLock'; __doPostBack(pageId,argumentString); } </代码>
额外 作者 Pavitar,
无论出于何种原因,我无法使用 onkeyup 事件处理它。有 JavaScript运行时错误:'__doPostBack'未定义。我使用的是C#和ASP.NET 2.0。
额外 作者 Andrew T.,

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

0
额外

您可能需要为常用方法创建Web服务 只需在要调用的函数上添加一个WebMethodAttribute,就是这样。
拥有所有常见内容的Web服务也使系统更易于维护。

0
额外
Microsoft AJAX库将完成此操作。您也可以创建自己的解决方案,包括使用AJAX调用自己的aspx(基本上)脚本文件来运行.NET函数。

这是一个名为AjaxPro的库,它被编写为名为 Michael Schwarz 的MVP。这是图书馆不是由微软写的。

我广泛使用了AjaxPro,并且它是一个非常好的库,我会推荐对服务器进行简单的回调。它确实与Microsoft版本的Ajax无关,并且没有任何问题。不过,我会注意到,微软已经成功制作了Ajax,我只会在真正需要时才使用它。通过将其放入更新面板中,您可以通过很多JavaScript来完成从Microsoft获得的一些非常复杂的功能。

0
额外

__ doPostBack()方法运行良好。

另一个解决方案(非常黑客)是简单地在标记中添加一个不可见的ASP按钮,并用JavaScript方法单击它。

<div style="display: none;">
   
</div>

从您的JavaScript中,使用它的 ClientID 检索对该按钮的引用,然后调用其上的 .click()方法。

var button = document.getElementById(/* button client id */);

button.click();
0
额外
如果我想使用一个参数呢?我可以从客户端获取它并将其与button.Click()一起使用吗?
额外 作者 Kubi,
额外 作者 Kubi,
Click方法是否存在?
额外 作者 Saher Ahwal,
JavaScript运行时错误:对象不支持属性或方法'getElementByID'哦mby去Id:D ffs casesensistive废话
额外 作者 Ms. Nobody,
@mbillard我花了很多时间搜索隐藏的方式(可视化的组件),后来我搜索如何从javascript调用asp函数。
额外 作者 Erick Asto Oblitas,
@Kubi在服务器端的一个参数?我通常所做的就是序列化需要发送给服务器端的参数并将它们放在隐藏字段中。
额外 作者 mbillard,
@saher是的,但它实际上是.click(小写c)( comptechdoc。组织/独立/网络/ CGI / javamanual / javabutton.h&zwnj; TML
额外 作者 mbillard,