客户端用户确认后ASPX服务器端函数调用?

时间:2009-04-03 23:01:12

标签: c# javascript asp.net

也许我正在搜索错误的关键字,但我无法找到解决方案。

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

  1. 询问(JS“确认”)用户是否真的要继续,然后
  2. 在页面类上调用一个方法,从该项目中传入ID(Guid)。
  3. 我可以做1或2,但无法弄清楚如何从JavaScript调用页面方法。

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

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

5 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:2)

这是你需要做的:

  1. 确保您的按钮有runat =“server”
  2. 在该按钮中,添加onClientClick =“javascript:return confirm('你确定吗?');”
  3. 从onClick甚至是按钮

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

答案 2 :(得分:0)

<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>

答案 3 :(得分:0)

以下是您需要做的事情:

  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()
    }
    
  5. 这只是一个普遍的想法,当然,这段代码可能需要一些抛光。您可以查找更多示例here

答案 4 :(得分:0)

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

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

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

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

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