【问题标题】:ASPX server-side function call after client-side user confirmation?客户端用户确认后调用 ASPX 服务器端函数?
【发布时间】:2009-04-03 23:01:12
【问题描述】:

也许我使用了错误的关键字进行搜索,但我找不到解决方案。

我有一个 ASPX 页面,我想在 <asp:Repeater> 中插入一个按钮(每个项目),它将:

  1. 询问(JS“确认”)用户是否真的要继续,然后
  2. 调用页面类的方法,传入该项目的 ID (Guid)。

我可以做 1 或 2,但不知道如何从 JavaScript 回调到页面方法。

我尝试在 ScriptManager 中打开 EnablePageMethods,但这似乎没有达到我的预期 - 调用 PageMethods.Blah(...) 似乎没有任何效果。

有现成的例子吗?事实上,每个条目的确认字符串都是相同的。

【问题讨论】:

    标签: c# javascript asp.net


    【解决方案1】:

    您可以使用按钮的OnClientClick 属性执行确认:

    <asp:Button runat="server" ID="DeleteButton" CommandName="Delete"
     Text="Delete" OnClientClick="return confirm('Are you sure ?');" />
    

    【讨论】:

      【解决方案2】:

      这是你需要做的:

      1. 确保您的按钮具有 runat="server"
      2. 在该按钮中,添加 onClientClick="javascript:return confirm('Are you sure?');"
      3. 从按钮的 onClick 调用您的服务器端代码

        <asp:Button id="Button1" Text="Do Stuff" OnClick="YOUR SERVER SIDE METHOD"    
          onClientClick="javascript: return confirm('Are you sure?');" runat="server"/>
        

      【讨论】:

        【解决方案3】:
        <asp:Repeater ID="YourRepeater" runat="server">
            <ItemTemplate>
                <asp:Button ID="btnDelete" runat="server" OnClientClick="javascript:return confirm('Are you sure ?');" OnClick="btnDelete_OnClick" />
            </ItemTemplate>
        </asp:Repeater>
        

        【讨论】:

          【解决方案4】:

          这是你需要做的:

          1. 启用脚本管理器(你做了)

          2. 创建一个 Web 服务,它将处理您代码中的回调:

            [WebService]
            [ScriptService]
            public class MyWebService : System.Web.Services.WebService 
            {
                [WebMethod]
                public int SomeCallbackFunction() 
                { .... }
            }
            
          3. 将指向 Web 服务代理的链接放入脚本管理器(由 [ScriptService] 生成):

            <asp:ScriptManager runat="server" ID="scriptManagerId">
                <Services>
                    <asp:ServiceReference  Path="WebService.asmx" />
                </Services>
            </asp:ScriptManager>
            
          4. 在您的 JavaScript 中,您将能够使用回调:

            function Blablabla() 
            {
                MyWebService.SomeCallbackFunction()
            }
            

          这只是一个大概的想法,当然,这段代码可能需要一些润色。您可以查找更多示例here

          【讨论】:

          • 如果他想要的只是“确认对话”,我认为这有点矫枉过正
          【解决方案5】:

          最终我决定在客户端做。我省略了 OnClick,但将 onclientclick 属性设置为确认的函数,然后使用 add 参数重定向到页面,该参数是有问题的表行。

          为什么?好吧,我的数据源是从几个表创建的只读列表,因此 (IIUC) 它是在处理按钮单击之前创建的。因此,页面在没有用户刚刚添加的数据的情况下刷新。

          相反,**add=***ID* 参数会导致添加成功(或错误)消息并突出显示新插入的行。缺点是如果用户要刷新页面,当然,但在这种情况下,它在 IFRAME 内,所以我认为这不太可能。

          那么,谢谢。你回答了我的问题,我只是没有意识到我的问题不是针对我想去的地方。

          顺便说一句,我让他们在数据库中添加一行。确认的原因是它会在服务器上产生长达一个小时的处理时间!

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2017-06-27
            • 1970-01-01
            • 2015-01-10
            • 2013-02-23
            • 2018-05-10
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多