C#.NET和Javascript确认

问题描述:

我有一个C#ASP.NET网页,带有一个xml文件上传表单。当用户点击“上传”时,会弹出一个javascript确认提示,询问用户“这个文件是否正确?”。只有当文件名不包含其他表单域中的值时,才会激活确认提醒。C#.NET和Javascript确认

如果上传文件的名称不符合特定条件,将C#ASP.NET表单和JavaScript确认提醒结合使用的最佳方式是什么?

+0

你使用什么web框架? ASP.NET? ASP.NET MVC? – cdmckay 2009-09-28 17:16:06

+0

ASP.NET框架 – Bryan 2009-09-28 17:16:36

我想你是在有价值的字符串隐藏字段(你没有提到)。实施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' post

+0

他也没有提及使用jQuery ... – 2009-09-28 17:52:34

+0

有人可以解释一下这些#吗?它必须与C#ID不同于JS ID吧? – Bryan 2009-09-28 18:02:29

+1

@Bryan:你接受了一个你不明白的答案? – 2009-09-28 18:04:09

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; 
    } 
} 
+1

用'.focus()'很好用。 – 2009-09-28 17:54:22

你不需要用C#处理这个页面,这听起来像大部分这些都会在客户端完成。

将文件上传控件和一个按钮添加到.aspx表单中。设置按钮的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,如果你想取消回发(即用户在确认对话框中点击“否”)。如果点击“否”,这将取消回发。

+0

你打我2分钟我去TEA ['']> – TheVillageIdiot 2009-09-28 17:32:32

+0

行为分离怎么样? – 2009-09-28 21:05:37

由于事件在这些浏览器中的工作方式,我在执行这种事情时遇到了问题,无法在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检查。