C#自定義FileUpload控制元件
摘要:ASP.NET自帶的FileUpload控制元件會隨著瀏覽器的不同,顯示的樣式也會發生改變,很不美觀,為了提高使用者體驗度,所以我們會去自定義FileUpload控制元件
實現思路:用兩個Button和TextBox控制元件來替代FileUpload控制元件,當點選Button時觸發FileUpload控制元件的點選事件,然後通過JS把FileUpload控制元件的Value賦給TextBox
程式碼:
aspx檔案:
1 <html xmlns="http://www.w3.org/1999/xhtml"> 2 <head id="Head1" runat="server"> 3 <title></title> 4 </head> 5 <body> 6 <form id="form1" runat="server"> 7 <div> 8 <asp:FileUpload ID="FileUp" runat="server" Style="display:none;width: 180px" /> 9 <asp:TextBox ID="txtFileName" runat="server" MaxLength="100" Width="170px"></asp:TextBox> 10 <asp:Button id="btnBrowse" runat="server" style="width:60px" CssClass="btn" OnClientClick="return ShowBrowse()" 11 Text="Browse" /> 12 <asp:Button ID="btnUpload" runat="server" Width="60px" CssClass="btn" OnClick="btnUpload_Click" 13 Text="Upload" /> 14 </div> 15 </form> 16 <script language="javascript" type="text/javascript"> 17 function ShowBrowse() 18 { 19 var file1=document.getElementById("FileUp"); 20 if(file1) 21 { 22 file1.click(); 23 var isie = (document.all) ? true : false; //判斷是IE核心還是Mozilla 24 return isie; //火狐瀏覽器加return false才會在選擇檔案後將檔名帶回到textbox,IE如果返回false上傳時要點選兩次按鈕才觸發 25 } 26 } 27 </script> 28 </body> 29 </html>
View Code
JS檔案:
1 function Check_FilePath() { 2 var FilePath = document.getElementById("FileUp"); 3 var FileNewName = document.getElementById("txtFileName"); 4 if (FilePath.value != ``) 5 { 6 FileNewName.value = FilePath.value; 7 } 8 }
aspx.cs檔案:
1 //Page_Load事件 2 this.FileUp.Attributes.Add("onchange", "javascript:return Check_FilePath();");
1 //btnUpload_Click事件 2 //當點選btnUpload_Click時,把檔案上傳到指定路徑 3 //需要考慮多瀏覽器的問題,如果是IE,直接用FileUpload控制元件的SaveAs功能,會儲存一個空檔案 4 string strFileName="本地儲存檔案的路徑"; 5 if (HttpContext.Current.Request.Browser.Browser == "IE") 6 { 7 WebClient wClient = new WebClient(); 8 wClient.DownloadFile(this.txtFileName.Text.Trim(), strFileName); 9 } 10 else 11 { 12 this.FileUp.PostedFile.SaveAs(strFileName); 13 }
遺留問題:當IE瀏覽器安全級別高時,會取不到檔案的完整路徑,類似於C:fakepathTP.jpg,而導致儲存不了;
網上的很多解決辦法是手動更改IE瀏覽器的安全級別,我在想是否可以在程式碼中實現更改IE瀏覽器的安全級別,研究ing……
希望有解決方案的朋友們可以分享一下:)
如果您看了本篇部落格,覺得對您有所收穫,請點選右下角的 [推薦]
如果您想轉載本部落格,請註明出處
如果您對本文有意見或者建議,歡迎留言
感謝您的閱讀,請關注我的後續部落格
相關文章
- C#自定義控制元件—指示燈C#控制元件
- C#自定義控制元件—儀表盤C#控制元件
- C#自定義控制元件—流動管道C#控制元件
- C#自定義控制元件—旋轉按鈕C#控制元件
- C#自定義控制元件—轉換開關C#控制元件
- C#自定義控制元件—文字顯示、文字設值C#控制元件
- 自定義控制元件ViewPager控制元件Viewpager
- 自定義Switch控制元件控制元件
- 4. 自定義控制元件(4) --- 自定義屬性控制元件
- winform 自定義容器控制元件ORM控制元件
- WPF Blend 自定義控制元件控制元件
- Flutter 之 自定義控制元件Flutter控制元件
- iOS自定義控制元件 SlideriOS控制元件IDE
- iOS自定義控制元件 AlertViewiOS控制元件View
- iOS自定義控制元件 SegmentiOS控制元件
- C# 根據BackgroundWoker非同步模型和ProgressBar控制元件,自定義進度條控制元件C#非同步模型控制元件
- [C#] (原創)一步一步教你自定義控制元件——05,Label(原生控制元件)C#控制元件
- [C#] (原創)進度等待視窗(附:自定義控制元件的使用)C#控制元件
- Flutter 自定義縮放控制元件Flutter控制元件
- Qt實現自定義控制元件QT控制元件
- AngularJS自定義表單控制元件AngularJS控制元件
- 【Android】自定義樹形控制元件Android控制元件
- 自定義控制元件 --- 電池icon控制元件
- iOS自定義控制元件:簡易下拉控制元件iOS控制元件
- QT常用控制元件(三)——自定義控制元件封裝QT控制元件封裝
- WPF自定義FixedColumnGrid佈局控制元件控制元件
- 【自定義使用者控制元件】CNMButton控制元件
- UWP 自定義密碼框控制元件密碼控制元件
- iOS 自定義拖拽式控制元件:QiDragViewiOS控制元件View
- 自定義控制元件總結和思考控制元件
- Android 控制元件架構與自定義控制元件詳解Android控制元件架構
- iOS自定義控制元件:自定義TableView、CollectionView空資料佔點陣圖iOS控制元件View
- 自定義圓形進度條控制元件控制元件
- 簡單的自定義表單控制元件控制元件
- 如何開發FineReport的自定義控制元件?控制元件
- Qt自定義開關按鈕控制元件QT控制元件
- WPF 仿語音播放 自定義控制元件控制元件
- UWP自定義ToggleButton控制元件的樣式控制元件
- iOS 自定義卡片式控制元件:QiCardViewiOS控制元件View