在我的ASP.NET Web表單中,我試圖自定義我的文件上載面板。我所做的只是放入一個HTML輸入按鈕和一個文本框。還有一個隱藏的HTML文件上傳控制。當用戶點擊按鈕時,出現文件選擇窗口,當用戶選擇文件時,該值被寫入可見文本框。ASP.NET中的HTML文件上傳:HttpPostedFile屬性爲空
到目前爲止,這一切都很好。但是我在嘗試將選定文件附加到代碼頁中的電子郵件時遇到問題。
這裏的HTML標記:
<asp:ImageButton ID="clickme" runat="server" ImageUrl="Images/browse.png" OnClientClick="$('#uploadme').click(); return false;" />
<input id="uploadme" name="uploadme" type="file" style="visibility: hidden;" onchange="CopyMe(this, 'txtFileName');" />
<input id="txtFileName" type="text" name="txtFileName" readonly="readonly" class="file-path" />
而且JS(我用這個以只複製文件名,並將其寫入txtFileName只是展現給用戶):
<script type="text/javascript">
function CopyMe(oFileInput, sTargetID) {
var arrTemp = oFileInput.value.split('\\');
document.getElementById(sTargetID).value = arrTemp[arrTemp.length - 1];
}
和CSS:
input[type=file] { width: 1px; }
我在我的.cs文件中使用下面的代碼來獲取文件屬性:
HttpPostedFile file = Request.Files["uploadme"]
但我一直在得到空值。所以經過一番調查,我發現我的表格必須使用enctype="multipart/form-data"
屬性。由於我的.aspx文件在母版頁文件下,因此我將該屬性添加到了我的母版頁文件中的表單中。現在Request.Files["uploadme"]
不爲空,但其文件名爲空字符串,其ContentLength爲0.
我無法理解可能是此問題的來源。如果是因爲使用母版頁的形式,我不能將表單添加到我的子頁面,因爲它表示頁面只能有一個表單。我不知道是否可以使用JavaScript進行上傳,因爲我需要在上傳後通過電子郵件發送文件,所以我不知道如何在通過JS上傳後獲取文件。
我該如何解決這個問題?它可能是這樣或那樣,我只需要一個風格化的上傳面板和上傳後的電子郵件文件。