为什么我无法在服务器端获取所选文件?

时间:2016-02-27 23:10:24

标签: asp.net

我有这个asp代码:

tmp_list = dir(oSel)
content = '\n'.join(lines)
with open('C:/Users/Haggai/Desktop/dir.txt',"w") as text_file:
    text_file.write(content ) 

这里是浏览器上生成的HTML代码:

        <asp:Panel runat="server">  
            <div class="row2">
            <input type="file" accept="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel" id="fileSelect" name="fileSelect" runat="server" />
            <asp:Button ID="btnUpload" runat="server" Text="load" OnClick="btnUpload_Click2" CausesValidation="False" />
            </div>
        </asp:Panel>

这里有代码:

<div class="row2">               
            <input name="ctl00$ContentPlace$fileSelect" type="file" id="ctl00_ContentPlace_fileSelect" accept="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel">
            <input type="submit" name="ctl00$ContentPlace$btnUpload" value="load" id="ctl00_ContentPlace_btnUpload">
        </div>
</div>

在我输入文件元素的帮助下选择一个文件后,btnUpload按下后面的代码,但我总是得到文件值为null。

如果我更改此行:

    protected void btnUpload_Click2(object sender, EventArgs e)
    {
        HttpPostedFile file = Request.Files["fileSelect"];                     
    }

到这一行:

HttpPostedFile file = Request.Files["fileSelect"];

我在服务器上的文件变量中获取所选文件。

所以我的问题是,如果我使用这一行,为什么我无法获取文件:

HttpPostedFile file = Request.Files["ctl00$ContentPlace$fileSelect"]; 

1 个答案:

答案 0 :(得分:1)

您的输入控件在服务器端运行,更改其ID ,并获取已发布的名称,您需要将UniqueID用作

HttpPostedFile file = Request.Files[fileSelect.UniqueID];

在你的情况下,fileSelect.UniqueID返回"ctl00$ContentPlace$fileSelect",它是html上nane呈现的控件,即帖子上使用的控件。

您还可以看到Accessing control client name and not ID in ASP.NET

如何使用您键入的内容

使用该行

HttpPostedFile file = Request.Files["fileSelect"];

只需从输入控件中删除runat="server"