【问题标题】:Call javascript and c# method with one click一键调用javascript和c#方法
【发布时间】:2013-03-03 09:00:30
【问题描述】:

我有一个 javascript 方法和一个 c# 方法,现在单击一个按钮,我想同时调用它们。

首先我想调用名为'Find_Direction' 的c# 方法,因为它可以输入onclick,然后我将在名为calcRoute 的javascript 方法之后调用。

我正在尝试这个,但没有任何运气:

<asp:Button id="Button1" UseSubmitBehavior="False" value="GetDirections" onclick="calcRoute" OnClientClick="Find_Direction" runat="server"/>

弹出如下错误:

Description: An error occurred during the compilation of a resource required to service this request. Please review the following specific error details and modify your source code appropriately.

Compiler Error Message: CS1061: 'ASP.findroute_aspx' does not contain a definition for 'calcRoute' and no extension method 'calcRoute' accepting a first argument of type 'ASP.findroute_aspx' could be found (are you missing a using directive or an assembly reference?)

【问题讨论】:

    标签: javascript asp.net button


    【解决方案1】:

    您正在 onClick 事件中指定 javascript 函数名称。所以把C#函数名放在这里

    C#代码:

     protected void  Find_Direction (object sender, EventArgs e)
     {
       // do your work
    
       // Register your javascript function
    
        Page.ClientScript.RegisterStartupScript(this.GetType(), "script", "  <script>calcRoute();</script>");
     }
    

    你的标记:

    <asp:Button id="Button1" value="GetDirections" onclick="Find_Direction" runat="server"/>
    

    案例2:在服务器端函数之前调用javascript函数

    Javascript 函数

     function calcRoute() {
    
            alert('test')
            return true;
        }
    

    你的标记

     <asp:Button id="Button1" value="GetDirections" onclick="Find_Direction " OnClientClick="return Find_Direction()" runat="server"/>
    

    通过这种方式,您可以调用 javascript 函数,然后调用服务器端,但请确保您从 javascript 函数返回 true 以调用服务器端函数。

    我希望,现在您可以解决您的问题。 :)

    【讨论】:

    • 这样会先执行find_direction方法吗? @萨钦
    • 没有。我以为您希望 find_Direction 在 calcRoute 之后执行。但是,如果您希望首先执行 find_Direction 而不是像 OnClientClick="return Find_Direction" 这样在客户端单击时调用它,那么没问题。
    • 我还在苦苦挣扎。因为它似乎不在 javscript 方法中。 @萨钦
    • Onclick 它在 Find_Direction 方法中进行,但不是通过 javascript 方法
    • @IT_info 我已经编辑了我的答案,使用案例 2,您可以先调用 Find_Direction,然后再调用 calcRoute。我从标记中删除了UseSubmitBehavior="False"。看看。
    【解决方案2】:

    您的代码隐藏(aspx.cs 或 aspx.vb 文件)中需要一个名为 calcRoute 的事件处理程序。

    如果您希望 JS 先执行,您应该能够按照您的方式执行,OnClientClick 指向 JS 函数,OnClick 指向 C#/VB 方法(事件处理程序)。

    如果您想确保在您的 C# 代码之后调用 JS,您应该处理后端的点击,然后通过注册启动脚本将 JS 发送回浏览器。除非您使用更新面板,否则这将导致完整的回发。在您的事件处理程序中,您可以使用Page.RegisterStartupScript 注册一个启动脚本,以将 javascript 命令发送回浏览器。在这种情况下,您根本不想使用 OnClientClick。

    【讨论】:

    • 但先处理哪个? calcRoute 或 Find_Direction 方法。我想先处理 Find_Direction。 @Adam Plocher
    • 哦,对不起,我以为你想要它的另一种方式。 OnClientClick 应该在回发/事件处理程序之前执行。
    猜你喜欢
    • 2018-12-18
    • 1970-01-01
    • 2011-02-01
    • 1970-01-01
    • 2014-03-22
    • 2012-03-06
    • 2012-07-21
    • 1970-01-01
    • 2013-01-26
    相关资源
    最近更新 更多