有人知道如何使用javascript调用服务器端c#方法吗?我需要做的是,如果 Select "取消",则停止导入;如果 Select "确定",则继续导入.我使用visual studio 2010和c#作为编程语言

这是我的代码:

private void AlertWithConfirmation()            
{                 
    Response.Write(
        "<script type=\"text/javascript\">" +     
            "if (window.confirm('Import is currently in progress. Do you want to continue with importation? If yes choose OK, If no choose CANCEL')) {" +     
                "window.alert('Imports have been cancelled!');" +     
            "} else {" +   
                "window.alert('Imports are still in progress');" +     
            "}" +      
        "</script>");   
}

推荐答案

PageMethod是Asp的一种更简单、更快的方法.Net AJAX

PageMethod是一种在Java脚本中公开服务器端页面方法的方法.这带来了如此多的机会,我们可以执行大量操作,而无需使用缓慢且烦人的回发.

在这篇文章中,我将展示ScriptManager和PageMethod的基本用法.在本例中,我创建了一个用户注册表,其中用户可以根据他的邮箱地址和密码进行注册.下面是我将要开发的页面的标记:

<body>
    <form id="form1" runat="server">
    <div>
        <fieldset style="width: 200px;">
            <asp:Label ID="lblEmailAddress" runat="server" Text="Email Address"></asp:Label>
            <asp:TextBox ID="txtEmail" runat="server"></asp:TextBox>
            <asp:Label ID="lblPassword" runat="server" Text="Password"></asp:Label>
            <asp:TextBox ID="txtPassword" runat="server"></asp:TextBox>
        </fieldset>
        <div>
        </div>
        <asp:Button ID="btnCreateAccount" runat="server" Text="Signup"  />
    </div>
    </form>
</body>
</html>

要设置page方法,首先必须在页面上拖动脚本管理器.

<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true">
</asp:ScriptManager>

还请注意,我已经更改了EnablePageMethods="true".
这将告诉ScriptManager我将从客户端调用PageMethods.

现在,下一步是创建服务器端函数.
下面是我创建的函数,该函数验证用户的输入:

[WebMethod]
public static string RegisterUser(string email, string password)
{
    string result = "Congratulations!!! your account has been created.";
    if (email.Length == 0)//Zero length check
    {
        result = "Email Address cannot be blank";
    }
    else if (!email.Contains(".") || !email.Contains("@")) //some other basic checks
    {
        result = "Not a valid email address";
    }
    else if (!email.Contains(".") || !email.Contains("@")) //some other basic checks
    {
        result = "Not a valid email address";
    }

    else if (password.Length == 0)
    {
        result = "Password cannot be blank";
    }
    else if (password.Length < 5)
    {
        result = "Password cannot be less than 5 chars";
    }

    return result;
}

要告诉脚本管理器此方法可以通过javascript访问,我们需要确保两件事:
首先:此方法应该是‘公共静电’.
第二:上面的代码中所写的方法上面应该有一个[WebMethod]标记.

现在我已经创建了服务器端函数来创建帐户.现在我们必须从客户端调用它.下面是我们如何从客户端调用该函数:

<script type="text/javascript">
    function Signup() {
        var email = document.getElementById('<%=txtEmail.ClientID %>').value;
        var password = document.getElementById('<%=txtPassword.ClientID %>').value;

        PageMethods.RegisterUser(email, password, onSucess, onError);

        function onSucess(result) {
            alert(result);
        }

        function onError(result) {
            alert('Cannot process your request at the moment, please try later.');
        }
    }
</script>

要调用我的服务器端方法Register user,ScriptManager会生成一个代理函数,该函数在PageMethods中可用
我的服务器端函数有两个参数,即邮箱和密码,在这些参数之后,我们必须给出另外两个函数名,如果方法成功执行(第一个参数,即OnSuces)或方法失败(第二个参数,即result),则将运行这些函数名.

现在一切似乎都准备好了,现在我已经在我的注册按钮上添加了OnClientClick="Signup();return false;"个.下面是我的ASPX页面的完整代码:

<!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>
        <asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true">
        </asp:ScriptManager>
        <fieldset style="width: 200px;">
            <asp:Label ID="lblEmailAddress" runat="server" Text="Email Address"></asp:Label>
            <asp:TextBox ID="txtEmail" runat="server"></asp:TextBox>
            <asp:Label ID="lblPassword" runat="server" Text="Password"></asp:Label>
            <asp:TextBox ID="txtPassword" runat="server"></asp:TextBox>
        </fieldset>
        <div>
        </div>
        <asp:Button ID="btnCreateAccount" runat="server" Text="Signup" OnClientClick="Signup();return false;" />
    </div>
    </form>
</body>
</html>

<script type="text/javascript">
    function Signup() {
        var email = document.getElementById('<%=txtEmail.ClientID %>').value;
        var password = document.getElementById('<%=txtPassword.ClientID %>').value;

        PageMethods.RegisterUser(email, password, onSucess, onError);

        function onSucess(result) {
            alert(result);
        }

        function onError(result) {
            alert('Cannot process your request at the moment, please try later.');
        }
    }
</script>

Asp.net相关问答推荐

在控制器中通过依赖项注入使用ASP.NET变量值时,不会持久化

使用 aspnet core SignalR 客户端为 VSIX 项目.

Swashbuckle 通过 .NET 应用程序中的 XML 注释使用格式标识符

jquery 1.9.0 和 modernizr 无法使用 ASP.NET Web 优化框架进行缩小

Window.Open 使用 PDF 流而不是 PDF 位置

ASP.NET-MVC 中的表单发布上的 FormCollection 为空

用于 ASP.NET 的 System.Drawing 的替代品?

无法加载文件或程序集'System.Web.WebPages.Razor,版本 = 3.0.0.0

上传时验证大文件

每个 'HttpRequest' 在 ASP.NET 中都有自己的线程吗?

ASP.NET 中的 <%# Bind("") %> 和 <%# Eval("") %> 有什么区别?

如何确定服务器端 C# 上的浏览​​器窗口大小

跟踪点有什么用途?

由于文件路径太长,网站发布失败

如何获取程序集的最后修改日期?

如何使用 encodeURIComponent() 解码在 JS 中编码的 HTML?

使用 ConfigurationManager.RefreshSection 重新加载配置而不重新启动应用程序

ASP.net 网站中的 C# 密码文本框

为什么 C# 对于 CSC 文件会遇到此错误?

ASP.NET Web 窗体中的 jQuery 验证插件