简体   繁体   English

需要在OnClientClick之前执行OnClick事件

[英]Need to execute the OnClick event before OnClientClick

I am developing a scanning application and I need to do some validation and db updates and then scan the document. 我正在开发一个扫描应用程序,我需要进行一些验证和数据库更新,然后扫描文档。

I have tried various approaches based on searching for answers and not able to locate anything. 我已经尝试过各种基于搜索答案的方法,但是无法找到任何东西。

                <asp:ScriptManager ID="script1" runat="server" EnablePageMethods="true"></asp:ScriptManager>
                    <asp:UpdatePanel ID="panel1" runat="server">
                        <ContentTemplate>
                             <tr><td><asp:Button ID="btnScan" runat="server" Text="Scan" OnClick="Scan" OnClientClick="return AcquireImage()" /><p></td></tr>
                         </ContentTemplate>
                    </asp:UpdatePanel>
              </table>            
          </td>        
          <td>                        
            <table width=100% >
                <tr><td>
                    <div id="dwtcontrolContainer" > </div>
                </td></tr>
            </table>  
            <script type="text/javascript">
                function AcquireImage() {
                        var DWObject = Dynamsoft.WebTwainEnv.GetWebTwain('dwtcontrolContainer');
                        DWObject.IfDisableSourceAfterAcquire = 'true';
                        DWObject.SelectSource();
                        DWObject.OpenSource();
                        DWObject.AcquireImage();
//                        var isPostBack = <%=Convert.ToString(Page.IsPostBack).ToLower()%>;
//                        alert(isPostBack);
                       return true;
                    }

Have even tried removing the OnClientClick and executing the javascript through the onClick event. 甚至尝试过删除OnClientClick并通过onClick事件执行javascript。 It enters the Onclick but won't execute the javascript 它进入Onclick,但不会执行javascript

        if (enddate.Text == "")
        {
            ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "key", "alert('Please enter a Transaction date before scanning');", true);
            return;
        }

        //ScriptManager.RegisterStartupScript(this, this.GetType(), "myScript", "AcquireImage()", false);
        Page.ClientScript.RegisterStartupScript(this.GetType(), "CallMAnotherFunction", "javascript:AcquireImage();", true);

Any help would be greatly appreciated. 任何帮助将不胜感激。

OnClientClick event runs on client-side and OnClick event runs on server-side. OnClientClick事件在客户端运行, OnClick事件在服务器端运行。 OnClientClick triggers first, so it's impossible to execute the OnClick event before OnClientClick . OnClientClick首先触发,因此不可能在OnClientClick之前执行OnClick事件。

According to your requirement, you need to run server-side code first, and then run a client-side callback. 根据您的要求,您需要首先运行服务器端代码,然后运行客户端回调。 Here is my solution. 这是我的解决方案。

<%@ Page Language="C#" %>

<!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 id="head1" runat="server">
    <title>Button.OnClientClick Example</title>
    <script type="text/javascript" src="http://tst.dynamsoft.com/libs/dwt/14.0/dynamsoft.webtwain.min.js"> </script>
</head>
<body>

    <script runat="server">

    void Button1_Click(object sender, EventArgs e)
    {
        string script = @"
        var DWObject = Dynamsoft.WebTwainEnv.GetWebTwain('dwtcontrolContainer');
        DWObject.IfDisableSourceAfterAcquire = true;
        var bSelected = DWObject.SelectSource(); 

        if(bSelected) {
            var OnAcquireImageSuccess, OnAcquireImageFailure;
            OnAcquireImageSuccess = OnAcquireImageFailure = function () {
            DWObject.CloseSource();
            };
        };

        DWObject.OpenSource();
        DWObject.AcquireImage(OnAcquireImageSuccess, OnAcquireImageFailure);  

        ";
        bool isTrue = true;
        if (isTrue)
        {
            ScriptManager.RegisterClientScriptBlock(this, GetType(), "key", script, true);
        }


    }

</script>
    <form id="form1" runat="server">

        <h3>Dynamsoft Dynamic Web TWAIN Demo</h3>

        <p></p>

    <div id="dwtcontrolContainer"></div>
        <asp:ScriptManager ID="ScriptManager1" runat="server">
        </asp:ScriptManager>
        <asp:UpdatePanel ID="UpdatePanel1" runat="server">
            <ContentTemplate>
                <asp:Button ID="Button1" runat="server" CausesValidation="False" OnClick="Button1_Click" Text="Scan Documents" UseSubmitBehavior="False" />
            </ContentTemplate>
        </asp:UpdatePanel>


    </form>

    </body>
</html>

Note: the ScriptManager and UpdatePanel ( AJAX Extension ) are required in order to make Dynamic Web TWAIN code work. 注意:为了使Dynamic Web TWAIN代码正常工作,需要ScriptManagerUpdatePanelAJAX扩展 )。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM