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

Alo*_*n M 3 javascript c# asp.net jquery webforms

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

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>

    </div>
    </form>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

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

protected void XXX(object sender, EventArgs e)
{
    Response.Redirect("pagewho?");
}
Run Code Online (Sandbox Code Playgroud)

再次感谢,Alon.:)

编辑:

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

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
  <script type="text/javascript">
      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;
      }

  </script>
    <form id="form1" runat="server">
    <div>
    <asp:Button ID="Button1" runat="server" OnClientClick="return validateStuff();" OnClick="Button1_Click" />
        <br />
        <br />
        <asp:TextBox ID="TextBox1" runat="server" Height="25px" Width="135px"></asp:TextBox>
        <br />
        <br />
        <br />
    </div>
    </form>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

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

Jam*_*son 6

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

编辑

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

<asp:Button ID="Button1" runat="server" OnClientClick="return validateStuff();" OnClick="Button1_Click" />
Run Code Online (Sandbox Code Playgroud)

您的JavaScript验证:

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

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

protected void Button1_Click(object sender, EventArgs e)
{
    //save some stuff to the database

    string txtValue = TextBox1.Text.Trim();
}
Run Code Online (Sandbox Code Playgroud)

在JavaScript中:

redirectToAnotherPage = function(){
    __doPostBack("<%=SomeServerControl.ClientID%>", "someArgument");
}
Run Code Online (Sandbox Code Playgroud)

在代码隐藏中:

protected override void RaisePostBackEvent(IPostBackEventHandler source, string eventArgument)
{
    //call the RaisePostBack event 
    base.RaisePostBackEvent(source, eventArgument);

    Response.Redirect("anotherpage.aspx");
}
Run Code Online (Sandbox Code Playgroud)

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

redirectToAnotherPage = function(){
    window.location.href = "somepage.aspx";
}
Run Code Online (Sandbox Code Playgroud)


Dav*_*vid 5

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

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