由于考虑到安全原因,不允许给FileUpload赋值,但是我们平时经常遇到页面刷新后,FileUpload之前选择的为空了,用户需要重新选择文件,很麻烦,这里提供一种比较简单的解决办法。
思路:做一个伪FileUpload控件,页面上放一个FileUpload,设置不可见,用另外的button触发FileUpload的“浏览...”事件,在FileUpload的change事件中把选择的文件路径赋值给TextBox,这里的TextBox和button组合就变成了这个伪FileUpload,这里的TextBox可以随便赋值,页面刷新也不会清空
UCFilejpload.ascx代码:
<%@ Control Language="vb" AutoEventWireup="false" CodeBehind="UCFilejpload.ascx.vb" Inherits="WebApplicationVB.UCFilejpload" %> <script src="jquery-1.9.1.js"></script> <script type="text/javascript"> $(document).ready(function () { $('#selectFile').bind('click', function () { var ie = !-[1, ]; if (ie) { $('#fileupload').trigger('click').trigger('change'); } else { $('#fileupload').trigger('click'); } }); $('#fileupload').change(function () { $("#<%=txtFileUrl.ClientID%>").val($(this).val()); }); }); function selectDo() { $("#fileupload").trigger('click'); } </script> <asp:TextBox ID="txtFileUrl" runat="server" Width="200px"></asp:TextBox> <input type="file" name="fileupload" id="fileupload" style=" 0px; FILTER: alpha(opacity=0); moz-opacity: 0; opacity: 0; display: none;" /> <input type="button" onclick="selectDo()" value="浏览..." /> <asp:RequiredFieldValidator ID="RequiredFieldValidator1" ControlToValidate="txtFileUrl" runat="server" ErrorMessage="*" ForeColor="Red"></asp:RequiredFieldValidator>
UCFilejpload.ascx.vb代码:
Public Class UCFilejpload Inherits System.Web.UI.UserControl Public Property StrUrl As String Get Return txtFileUrl.Text End Get Set(value As String) txtFileUrl.Text = value End Set End Property End Class
效果如下: