【问题标题】:Multiple file inputs多个文件输入
【发布时间】:2011-06-03 20:29:00
【问题描述】:

我正在使用 Asp.net 并且要求指定我使用 html 输入将文件发布到服务器而不是 asp:fileupload。[原因:添加更多类似于 CPanel 文件管理器的 html 输入文件控件。(即)单击链接添加另一个用户可以从中选择另一个文件的文件输入*。但是当我发回请求文件集合时总是空的。* HTML 表单:

<form method="post" enctype="multipart/form-data" action="documents.aspx">
<div>
    <input type="file" name="attachment" id="attachment" onchange="validate(this)" />
    <span class="none">Filename should be within (1-25) letters long. Can Contain only letters
        & numbers</span>
    <div id="moreUploads">
    </div>
    <div id="moreUploadsLink" style="display: none;">
        <a href="javascript:addFileInput();">Attach another File</a></div>
        <input type="submit" id="btnSubmit" />
</div>
</form>

Javascript:

var upload_number = 2;function addFileInput() {
try {
    var fileUpload = document.getElementById("attachment");
    var elemSpan = nextElement(fileUpload).cloneNode(true);
    var elemDiv = document.getElementById("moreUploads");
    var d = document.createElement("div");
    var file = document.createElement("input");
    file.setAttribute("type", "file");
    file.setAttribute("id", "attachment" + upload_number);
    file.setAttribute("onchange", "validate(this)");
    d.appendChild(file);
    d.appendChild(elemSpan);
    elemDiv.appendChild(d);
    upload_number++;
} catch (err) {    alert(err);}}

validate(this) 是一个在客户端验证文件类型的函数。当验证成功时,添加更多文件输入的链接被启用。有人可以对此有所了解吗?

【问题讨论】:

  • 这个表单是否在 ASP.NET 页面中创建的普通表单标记内?这意味着您有一个围绕上述表单的
  • 没有此页面在内容占位符内[这意味着我在母版页的子页面上]
  • 您的母版页上可能有一个表单标签。如果你查看网页的 html 源代码,你会看到两个表单标签吗?
  • 是的,它有 2 个表单标签。形成母版页和子页。母版页具有正确连接的属性。我应该从子页面中删除一个吗?

标签: asp.net validation post file input


【解决方案1】:

我认为您需要设置输入的name 属性。添加这个:

file.setAttribute("name", "attachment" + upload_number);

更新

您似乎遇到的另一个问题是您试图将一个表单标签嵌套在另一个标签中(因为您的母版页通常已经有一个&lt;form runat="server"&gt;)。在这种情况下,您的上传将不起作用,因为主表单没有正确的 enctype 值。通常,如果您使用 asp.net FileUpload 控件,它会自动为您在主表单标签上将正确的 enctype 设置为 multipart/form-data。但是,由于您只使用纯 html 输入,asp.net 不知道您正在尝试上传文件,因此不会为您设置 enctype。

所以你需要做的是:

a) 去掉上面的表单标签(不需要它)

b) 在此页面的代码隐藏中,将以下行放入 page_init 事件的处理程序中:

this.Form.Enctype = "multipart/form-data";

【讨论】:

  • 我的母版页上的表单没有 enctype。这为我修复了宇宙:) 非常感谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多