今天在寫一項目的更新模塊遇到的一個問題:.net fileUpLoad控件只要選擇了文件在Postback的時候這個文件都會被自動上傳到服務器,而我的更新模塊裡需要有選擇的判斷要不要上傳文件,原理說起來比較簡單,直接把fileUpLoad控件選定的文件去除不就行了貝,可是使用js去除的時候發現IE下fileUpLoad控件的值居然還是只讀的,而在FireFox下是可以更改的。如果在.net提交事件中來處理是不是要保存這個文件那就意味著,被fileUpLoad控件選擇的文件都會被上傳一次到服務器,只不過是你存不存的問題了,相當浪費帶寬及服務器資源啊。不過還好饅頭的BLOG裡給出了解決的辦法,經比較個人感覺以下方式比較好:
引用
創建一個新的form,把上傳控件臨時放過來,再調用這個form的reset方法,完工之後再把上傳控件弄回去。這個form無需進入DOM結構便能正常工作,所以不用擔心會對界面有任影響。
具體解決代碼:view plaincopy to clipboardprint?
//把這個JS放到頁面的<body>中 <script language="javascript" type="text/javascript"> //清空文件上傳框,file為上傳表單對像 function clearFileInput(file){ var form=document.createElement('form'); document.body.appendChild(form); //記住file在舊表單中的的位置 var pos=file.nextSibling; form.appendChild(file); form.reset(); pos.parentNode.insertBefore(file,pos); document.body.removeChild(form); } </script>
//把這個JS放到頁面的<body>中 <script language="javascript" type="text/javascript"> //清空文件上傳框,file為上傳表單對像 function clearFileInput(file){ var form=document.createElement('form'); document.body.appendChild(form); //記住file在舊表單中的的位置 var pos=file.nextSibling; form.appendChild(file); form.reset(); pos.parentNode.insertBefore(file,pos); document.body.removeChild(form); } </script>view plaincopy to clipboardprint?
//添加按鈕的客戶端腳本事件,當然你也可以寫在按鈕的屬性裡,或是直接在HTML的button上加onclick事件也一樣
btnCannel.OnClientClick = "clearFileInput(document.getElementById('" + 上傳控件ID.ClientID + "'));"