Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Javascript函数不会立即运行_C#_Javascript_Asp.net_File Upload - Fatal编程技术网

C# Javascript函数不会立即运行

C# Javascript函数不会立即运行,c#,javascript,asp.net,file-upload,C#,Javascript,Asp.net,File Upload,我有一些javascript函数,用FileUpload控件检查加载的文件 <script language="javascript" type="text/javascript"> function CheckFileBeforeUpdate() { var filePath = document.getElementById('<%= this.upFile.ClientID %>').value;

我有一些javascript函数,用FileUpload控件检查加载的文件

 <script language="javascript" type="text/javascript">
        function CheckFileBeforeUpdate() 
        {
            var filePath = document.getElementById('<%= this.upFile.ClientID %>').value;
            var validExtension = 'xml';
            var ext = filePath.substring(filePath.lastIndexOf('.') + 1).toLowerCase();
            if (ext == validExtension) return true;
            alert('The file extension ' + ext.toUpperCase() + ' is not allowed!');
            return false;
        }
    </script>
它通过按钮调用:OnClientClick=returncheckfilebeforeforeupdate

<asp:Button ID="LoginButton" runat="server" CommandName="Login" Text="Log In" 
           onclick="LoginButton_Click" OnClientClick="return CheckFileBeforeUpdate();" />
所以出现了不寻常的情况: 我选择了合适的文件,点击登录…尽管扩展不充分,它仍会继续执行下一个功能

否则,如单击文件上载,但选择无文件。 下次我选择一些扩展名不好的文件时,函数运行会显示警报

为什么会有封锁?每次运行更新之前,如何更改CheckFile

编辑 如果我没有选择任何文件,则会显示警报选择要登录的文件;当然然后是锁释放

<script language="javascript" type="text/javascript">
    function CheckFileBeforeUpdate() 
    {
        var filePath = document.getElementById('<%= this.upFile.ClientID %>').value;
        var popupWindow = document.getElementById('<%= this.popupWin.ClientID %>').value;
        if (filePath.length < 1) {
            alert("Select file to log in");
            return false;
        }
        var validExtension = 'xml';
        var ext = filePath.substring(filePath.lastIndexOf('.') + 1).toLowerCase();
        if (ext == validExtension) return true;
        alert('The file extension ' + ext.toUpperCase() + ' is not allowed!');
        return false;
    }
</script>

您只需使用asp验证程序即可:

<asp:FileUpload ID="fu1" runat="server" />
<asp:RequiredFieldValidator ID="req" runat="server"
   ErrorMessage="Select file" ControlToValidate="fu1" />
<asp:RegularExpressionValidator ID="rgx" runat="server"
   ErrorMessage="Extension not allowed" ControlToValidate="fu1"
   ValidationExpression=".*\.[xX][mM][lL]" />

仅根据问题和评论,显而易见的答案是删除这一行:

var popupWindow = document.getElementById('<%= this.popupWin.ClientID %>').value;
popupWindow的值在发布的代码中的任何地方都没有使用,因此似乎不需要行

编辑:

根据评论,我查找了控件。看见我认为这里的问题是,这个控件应该在回发或页面加载后显示,而不是从javascript显示。因为我没有控件,所以我不能确定,但是如果在回发发生之前需要使用Javascript在客户端上显示该控件,那么请尝试查看呈现页面的源代码,看看是否可以找到表示弹出窗口的HTML。希望它位于一个将popupWin.ClientID值设置为id的div中。如果是这种情况,则可以使用此javascript获取对它的引用:

var popupWindow = document.getElementById('<%= this.popupWin.ClientID %>'); //omit the .value
然后,您可以使用您最喜欢的代码来显示popupWindow div。我不会在这里包含该代码,因为如果您不使用jQuery之类的工具,那么如果您希望它在所有浏览器中都能工作,那么正确的答案相当长

<script type="text/javascript">
    var validFilesTypes = ["bmp", "gif", "png", "jpg", "jpeg", "doc", "docx", "xls", "xlsx", "rar", "zip", "txt", "pdf"];

    function CheckExtension(file) {
        /*global document: false */
        var filePath = file.value;
        var ext = filePath.substring(filePath.lastIndexOf('.') + 1).toLowerCase();
        var isValidFile = false;

        for (var i = 0; i < validFilesTypes.length; i++) {
            if (ext == validFilesTypes[i]) {
                isValidFile = true;
                break;
            }
        }

        if (!isValidFile) {
            file.value = null;
            alert("Invalid File. Valid extensions are:\n\n" + validFilesTypes.join(", "));
        }

        return isValidFile;
    }
</script>

就个人而言,我只会使用alert并跳过此控件。它更简单,更容易在所有浏览器中使用。

请将其加载到firefox中,查看控制台。如果有错误,IE将继续下一条语句。Fx将不会显示您的代码在Firefox中对我有效。您能否编辑问题并包含您尝试选择的文件的完整路径,该文件的扩展名无效?你能确定没有发生javascript错误吗?看第一条注释?当没有选择文件时,你的代码是如何处理这种情况的?它不会引发异常吗?2种情况:1:选择无文件->登录->验证运行-正确显示警报->然后每个下一个选择的文件都在检查。2:选择坏文件->验证不运行程序转到下一个功能您发布的代码在IE 8和Firefox 3.6中都能正常工作。我想你需要提供更多的信息。您使用什么浏览器进行测试?您是否在Firefox中尝试了错误控制台,以便查看是否有其他错误发生?如果子字符串函数出现异常情况,您选择的确切文件名是什么?完整实现CheckFileBeforeUpdate在第一篇文章中。这是一个来自外部dll的控件-更像WindowsForms中的messageBox。这里可以替换标准的警报窗口。但是,正如我们所看到的——并非总是这样:P在发布更新之前的CheckFileUpdate实现中,需要进行一些修改,您不需要获取对popupWin的引用,因为您在代码中的任何其他地方都不使用popupWin。您是否尝试使用popupWin而不是alert?在popupWin使用的更改之前的版本中。现在我扔了它,但是是的,我试着用它来代替警惕。初始化此控件在codebehind.OK中,所以我想说的是,这里没有足够的信息告诉您出了什么问题,因为我们看不到您试图如何使用popupWinPopupUp是否由第三方控制?你能告诉我们名字吗?这是一些外部控制。EeekSoft.Web.PopupWin.dlladd javascript到标记
<script type="text/javascript">
    var validFilesTypes = ["bmp", "gif", "png", "jpg", "jpeg", "doc", "docx", "xls", "xlsx", "rar", "zip", "txt", "pdf"];

    function CheckExtension(file) {
        /*global document: false */
        var filePath = file.value;
        var ext = filePath.substring(filePath.lastIndexOf('.') + 1).toLowerCase();
        var isValidFile = false;

        for (var i = 0; i < validFilesTypes.length; i++) {
            if (ext == validFilesTypes[i]) {
                isValidFile = true;
                break;
            }
        }

        if (!isValidFile) {
            file.value = null;
            alert("Invalid File. Valid extensions are:\n\n" + validFilesTypes.join(", "));
        }

        return isValidFile;
    }
</script>