我有一些函数javascript用FileUpload Control检查加载的文件
<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>
并使用Button调用它:OnClientClick =“return CheckFileBeforeUpdate();
<asp:Button ID="LoginButton" runat="server" CommandName="Login" Text="Log In"
onclick="LoginButton_Click" OnClientClick="return CheckFileBeforeUpdate();" />
所以有不寻常的情况: 我选择了合适的文件,点击登录...然后继续进行下一个功能,尽管扩展不足。
否则,如果我,例如单击FileUpload,但不选择任何文件。 下次我选择一些文件(即使扩展名不好),然后运行功能(显示警告)。
为什么会像封锁一样?我怎么做才能每次都更改CheckFileBeforeUpdate()?
修改 如果我选择没有文件,则显示警报(“选择要登录的文件”);当然。然后是锁定释放
<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>
答案 0 :(得分:1)
你可以用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]" />
答案 1 :(得分:1)
完全基于问题和评论,显而易见的答案是删除这一行:
var popupWindow = document.getElementById('<%= this.popupWin.ClientID %>').value;
popupWindow的值不会在发布的代码中的任何位置使用,因此看起来不需要该行。
编辑:
根据评论,我查看了控件。见this link。我认为这里的问题是这个控件是在回发或页面加载之后显示的,而不是来自javascript。由于我没有控件,我无法确定,但如果在回发发生之前需要使用Javascript在客户端上显示此控件,请尝试查看呈现页面的来源,看看是否可以找到HTML代表弹出窗口。希望它在一个div中,将popupWin.ClientID值设置为id。如果是这种情况,那么您可以使用此javascript来获取对它的引用:
var popupWindow = document.getElementById('<%= this.popupWin.ClientID %>'); //omit the .value
然后,您可以使用自己喜欢的代码来显示popupWindow div。我不会在这里包含这些代码,因为如果你不使用像jQuery这样的东西,如果你想让它在所有的浏览器中运行,那么正确答案就会很长。
就个人而言,我只会使用alert()并跳过此控件。它更简单,更有可能适用于所有浏览器。
答案 2 :(得分:0)
<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>