在Asp.net webforms中调用来自JavaScript / JQuery的C#函数

所以,我有一个aspx页面,看起来像这样:

       

我想知道,我如何编写将从我的C#代码调用函数的JavaScript(例如jQuery)代码。 让我们说这是我的C#方法:

 protected void XXX(object sender, EventArgs e) { Response.Redirect("pagewho?"); } 

再次感谢,Alon。 🙂

编辑:

这是我正在使用的完整代码:

         validateStuff = function () { var isValid = true; var txt = document.getElementById("TextBox1"); if (txt) { if (txt.value.toLower() != "james") { isValid = false; } } //perform validation and return true/false return isValid; }  





但是,无论我在文本框中连接什么,它都返回true。 任何帮助?

您可以从脚本中使用__doPostBack ,并在后面的代码中使用RaisePostBackEvent方法来执行服务器端逻辑。 如果您正在寻找重定向,这可能是最好的方法。

编辑

如果您希望在单击按钮时在JavaScript中进行一些validation,请使用OnClientClick执行JavaScriptvalidation,如果validation成功则返回true。

  

您的JavaScriptvalidation:

 validateStuff = function(){ var isValid = true; var txt = document.getElementById("<%=TextBox1.ClientID%>"); if (txt.value.toLower() != "james"){ isValid = false; } return isValid; } 

如果validateStuff函数返回true,则会发生回发,您可以在按钮单击事件中处理保存/更新逻辑:

 protected void Button1_Click(object sender, EventArgs e) { //save some stuff to the database string txtValue = TextBox1.Text.Trim(); } 

在JavaScript中:

 redirectToAnotherPage = function(){ __doPostBack("<%=SomeServerControl.ClientID%>", "someArgument"); } 

在代码隐藏中:

 protected override void RaisePostBackEvent(IPostBackEventHandler source, string eventArgument) { //call the RaisePostBack event base.RaisePostBackEvent(source, eventArgument); Response.Redirect("anotherpage.aspx"); } 

如果你要做的就是将用户带到另一个页面,你也可以这样做:

 redirectToAnotherPage = function(){ window.location.href = "somepage.aspx"; } 

为了让客户端代码调用服务器端代码,您可能需要使用AJAX 。 因为你提到了jQuery,它有一个非常方便的function来进行调用。 但是从JavaScript调用只是故事的一半,你还需要在服务器上监听该调用。 如果你打算使用jQuery(而不是其他选项,比如AJAX Toolkit ),那么我建议不要让这个方法“在页面上”,而应该是它自己的资源。 我建议使用HttpHandler来响应AJAX调用。

这里要记住的关键是,这与简单地回发到页面的结构有何不同。 使用AJAX,这些调用在页面内异步发生。 所以你应该知道的第一件事是Response.Redirect()在这种情况下不起作用。 它将重定向AJAX调用,而不是当前打开的页面。 可能有一些方法可以在ASP.NET中使用post-back方法来解决这个问题,但我不得不问……如果你所做的只是重定向那么为什么不在客户端呢? JavaScript有很多function。 您可以轻松地从回传服务器重定向,但是从JavaScript中为什么不只是让JavaScript做到这一点?

你可以通过使用webmethod来调用C#方法。 请参阅以下URL: http ://www.xdevsoftware.com/blog/post/Call-WebMethod-from-Javascript-in-ASPNET.aspx在Javascript中调用pagemethod。

但是对于你的例子,我建议你只是预先填充价值页面? 当HTML由asp .net呈现时使用asp.net标签。

示例(在javascript中):

 GoToLink("<%= YourCodeBehindMethodReturingURLToPutHere() %>"); 

参考: http : //weblogs.asp.net/ahmedmoosa/archive/2010/10/06/embedded-code-and-inline-server-tags.aspx

使用JavaScript从客户端调用C#方法的一种方法是使用webmethods

您需要在后面的代码中定义公共静态方法,并将[ WebMethod ]属性添加到其中。

在这个例子中,我使用了一个WebMethod,它将当前日期时间作为服务器的字符串返回:

[WebForm1.aspx.cs中]

 using System; using System.Web.Services; namespace TemplateWebMethod { public partial class WebForm1 : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { } [WebMethod] public static string MyMethod() { return DateTime.Now.ToString(); } } } 

在aspx页面表单中,您需要添加一个带有EnablePageMethods =“true”asp:ScriptManager

[WebForm1.aspx的]

 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="TemplateWebMethod.WebForm1" %>        

对于Button1:

使用ClientIDMode =“Static” ,因此Button1在客户端具有相同的ID,我们可以在添加客户端onclick时轻松搜索它。

需要UseSubmitBehavior =“false” ,以便按下按钮不会导致完整的回发。

在这个例子中,将通过按下Button1从代码隐藏调用WebMethod MyMethod,因此我们在window.onload上设置Button1的onclick行为:

 window.onload = function(){ document.getElementById('Button1').onclick = function() { PageMethods.MyMethod(myMethodCallBackSuccess, myMethodCallBackFailed); } } 

哪里:

 PageMethods.MyMethod(myMethodCallBackSuccess, myMethodCallBackFailed); 

是调用服务器端代码的JavaScript方法。

我们需要定义其成功和失败的2个回调方法。

成功后,我们使用MyMethod返回的值弹出一条消息:

 function myMethodCallBackSuccess(response) { alert(response); } 

在失败时,我们弹出一条带有错误消息的消息:

 function myMethodCallBackFailed(error) { alert(error.get_message()); } 
       

至于代码隐藏

 protected void Page_Load(object sender, EventArgs e) { if (Page.IsPostBack) { string ok = Request.Form["__OK"]; //getting data from hidden input if (ok == "1") // if it's 1 checking succeeded, thus it's ok to save data insertTextBoxValueintoDBTable(TextBox1.Text); //saving data } }