【发布时间】:2012-01-02 07:06:33
【问题描述】:
在我的 ASP.NET Web 表单中,我正在尝试自定义我的文件上传面板。我所做的只是简单地放置一个 HTML 输入按钮和一个文本框。还有一个隐藏的 HTML 文件上传控件。当用户点击按钮时,文件选择窗口出现,当用户选择文件时,值被写入可见文本框。
到目前为止一切都很好。但是我在尝试将所选文件附加到代码页中的电子邮件时遇到问题。
这是 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 上传后如何获取文件。
我该如何解决这个问题?这可能是一种或另一种方式,我所需要的只是一个风格化的上传面板,并在上传后通过电子邮件发送文件。
【问题讨论】:
标签: asp.net html file-upload