2009-09-28 55 views
0

我有一個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

回答

0

我想你是在有價值的字符串隱藏字段(你沒有提到)。實施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

有人可以解釋一下這些#<%= FileBox.ClientID%>嗎?它必須與C#ID不同於JS ID吧? – Bryan 2009-09-28 18:02:29

+1

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

0
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

2

你不需要用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

0

由於事件在這些瀏覽器中的工作方式,我在執行這種事情時遇到了問題,無法在IE和FireFox中工作。當我在其中一箇中工作時,即使我取消了,另一個仍然會導致回傳。

下面是我們的代碼(瀏覽器測試是從其他地方竊取的)。

if (!window.confirm("Are you sure?")) 
{ 
    if (/MSIE (\d+\.\d+);/.test(navigator.userAgent)) 
     window.event.returnValue = false; 
    else 
     e.preventDefault(); 
}
0

除了使用客戶端驗證之外,還應該添加一個CustomValidator以在服務器端提供驗證。您不能相信用戶已啓用Javascript,或者用戶尚未繞過Javascript檢查。