代码之家  ›  专栏  ›  技术社区  ›  NVRAM

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

  •  0
  • NVRAM  · 技术社区  · 15 年前

    也许我用错误的关键字搜索,但我找不到解决这个问题的方法。

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

    1. 询问(js“confirm”)用户是否确实要继续,然后
    2. 在页类上调用一个方法,从该项传入ID(guid)。

    我可以做1或2,但我不知道如何从javascript回调page方法。

    我试过在脚本管理器中打开EnablePageMethods,但这似乎没有达到我预期的效果——调用 PageMethods.Blah(...) 似乎没有 任何 效果。

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

    5 回复  |  直到 13 年前
        1
  •  2
  •   roman m    15 年前

    你需要做的是:

    1. 确保您的按钮已runat=“server”
    2. 在该按钮中,添加onclientclick=“javascript:return confirm('确定吗?');"
    3. 从onclick-even按钮调用服务器端代码

      <asp:Button id="Button1" Text="Do Stuff" OnClick="YOUR SERVER SIDE METHOD"    
        onClientClick="javascript: return confirm('Are you sure?');" runat="server"/>
      
        2
  •  3
  •   Christian C. Salvadó    15 年前

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

    <asp:Button runat="server" ID="DeleteButton" CommandName="Delete"
     Text="Delete" OnClientClick="return confirm('Are you sure ?');" />
    
        3
  •  0
  •   bytebender    15 年前
    <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
  •  0
  •   Jason Plank dvancouver    13 年前

    你需要做的是:

    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
  •  0
  •   Jason Plank dvancouver    13 年前

    最终我决定在客户端进行。我省略了 点击 但是设置 Onclipse点击 属性指向一个确认的函数,然后使用 添加 参数,它是相关表行的ID。

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

    相反,**add=***id*参数会导致添加、一条成功(或错误)消息并对新插入的行进行超链接。当然,缺点是如果用户要刷新页面,但在本例中,它在iframe中,所以我不认为这是可能的。

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

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