我有gridview,其中包含一个包含HTMLInput文件控件(上传按钮)的列,另外我们这里有一个图片,这是代码:
<ItemTemplate>
<asp:PlaceHolder ID="PlaceHolder1" runat="server" Visible='<%# Bind("IsfileUplo") %>'>
<div>
<table>
<tr>
<td>
<input id="Upload1" type="file" name="file" onchange="javascript:previewFile(this)" runat="server" accept="image/*" />
</td>
</tr>
</table>
</div>
<div>
<table>
<tr>
<td>
<asp:Image ID="Image2" runat="server" Height="100px" Width="100px" />
</td>
<td>
<asp:Label ID="Label5" runat="server" Text="" Width="120px"></asp:Label>
</td>
</tr>
</table>
</div>
</ItemTemplate>
运行网站后,我们有类似的内容:
正如您所看到的那样,每个行中都有一个包含这些控件的项模板。现在我需要触发previewFile()javascript函数,该函数获取上传按钮和图像ID,然后将执行某些操作。这是代码:
function previewFile() {
var preview = document.querySelector('#<%=Image2.ClientID %>');
var file = document.querySelector('#<%=Upload1.ClientID %>').files[0];}
问题出在这里,它无法检测网格视图项目模板中的Image2和Upload1控件。我需要使用上传控件获取所选图片的图像路径,并使用此脚本在客户端的图像控件中显示它。但我无法传递正确的控制ID以使其正常工作。
我该怎么办?
答案 0 :(得分:1)
我将您的onchange="previewFile()"
更改为onchange="previewFile(this)"
。它将定位特定控件(您单击了该控件),并在ItemTemplate
(点击parentNode
的{{1}})内搜索第一个input type="file"
控件。
aspx:
Image
js:
<ItemTemplate>
<input id="Upload1" type="file" name="file" onchange="previewFile(this)" runat="server" accept="image/*" />
<asp:Image ID="Image2" runat="server" Height="100px" Width="100px" />
</ItemTemplate>
顺便说一句。这只是预览所选图像。它没有上传。
已更新:(适用于更改问题的新代码)
function previewFile(ele) {
var fl = ele.files[0]; //get selected file
var img = ele.parentNode.getElementsByTagName('img')[0]; //get 1st image control in ItemTemplate where is Your input file is.
img.src = window.URL.createObjectURL(fl); //preview image without uploading
}