我有一个带有 xml 文件上传表单的 C# ASP.NET 网页。当用户单击“上传”时,会弹出一个 javascript 确认警报,询问用户“此文件是否正确?”。仅当文件名不包含来自其他表单字段之一的值时,才会激活确认警报。
结合使用 C# ASP.NET 表单和 javascript 确认警报的最佳方法是什么,如果正在上传的文件的名称不符合某些条件,则激活该警报?
我有一个带有 xml 文件上传表单的 C# ASP.NET 网页。当用户单击“上传”时,会弹出一个 javascript 确认警报,询问用户“此文件是否正确?”。仅当文件名不包含来自其他表单字段之一的值时,才会激活确认警报。
结合使用 C# ASP.NET 表单和 javascript 确认警报的最佳方法是什么,如果正在上传的文件的名称不符合某些条件,则激活该警报?
对于这个页面,你不需要用 C# 做太多事情,听起来大部分都将在客户端完成。
将文件上传控件和一个按钮添加到您的 .aspx 表单中。将 Button 的 OnClientClick 属性设置为类似
OnClientClick = "return myFunction()"
然后编写一个javascript函数,如:
function myFunction()
{
// Check other text values here
if (needToConfirm){
return confirm('Are you sure you want to upload?');
}
else return true;
}
如果您希望取消回发(即用户在确认对话框中单击“否”),请确保“myFunction()”返回 false。如果他们单击“否”,这将取消回发。
window.onload = function() {
document.forms[0].onsubmit = function() {
var el = document.getElementById("FileUpload1");
var fileName = el.value;
if(fileName.indexOf("WHATEVER_VALUE") == -1) {
if(!confirm("Is the file correct?")) {
el.focus();
return false;
}
}
return true;
}
}
我想您将有效字符串的值放在隐藏字段中(您没有提到)。实现OnClientClick
上传按钮:
<asp:button .... OnClientClick="return confirmFileName();"/>
<script type="text/javascript">
function confirmFileName()
{
var f = $("#<%= file1.ClientID %>").val();
var s=$("#<%= hidden1.ClientID %>").attr("value");
if (f.indexOf(s) == -1) {
if (!confirm("Is this correct file?")) {
$("#<%=file1.ClientID %>").focus();
return false;
}
}
return true;
}
</script>
编辑:-关于<%= file1.ClientID %>
.
这将替换为文件上传控件的客户端 ID,例如ctl00$ctl00$cphContentPanel$file1
. 它使脚本在使用类似$("input[id$='file1']")
. 有关更多信息,请参阅Dave Wards 的帖子。
由于事件在这些浏览器中的工作方式,我在实现这种事情以在 IE 和 FireFox 中工作时遇到了问题。当我让它在其中一个中工作时,即使我取消,另一个仍然会导致回发。
这是我们代码中的内容(浏览器测试是从其他地方窃取的)。
if (!window.confirm("Are you sure?"))
{
if (/MSIE (\d+\.\d+);/.test(navigator.userAgent))
window.event.returnValue = false;
else
e.preventDefault();
}
除了使用客户端验证之外,您还应该添加一个 CustomValidator 以在服务器端提供验证。您不能相信用户打开了 Javascript,或者用户没有绕过您的 Javascript 检查。