多个文件输入

时间:2011-01-05 07:16:38

标签: asp.net validation post file input

我正在使用Asp.net并且要求指定我使用html输入将文件发布到服务器而不是asp:fileupload。[原因:添加更多html输入文件控件类似于CPanel文件管理器。(即)点击链接添加另一个文件输入,用户可以从中选择另一个文件* 。但是,当我回发时,请求文件集合始终为空。 * 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)是一个验证客户端上文件类型的函数。验证成功后,将启用添加更多文件输入的链接。有人可能会对此有所了解。

1 个答案:

答案 0 :(得分:1)

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

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

<强>更新

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

所以你需要做的是:

a)摆脱上面的表格标签(不需要)

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

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