我有这个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"];
答案 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"
。