如何强制 'asp:Image' 加载新的 'imageUrl' ?

How to force 'asp:Image' to load new 'imageUrl' ?

例如,我有一个代表 "box" 的页面。在这个框中,我有多个图像。我在数据网格视图中的一行中显示每个图像信息。我想要实现的是通过单击任何行在网格下显示图像本身。我试图做的是下一个:

在后面的代码中,加载网格时,我在 ItemDataBound 事件中添加了一个属性,例如:

Private Sub dgrBox_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DataGridItemEventArgs) Handles dgrBox.ItemDataBound
    If e.Item.DataItem IsNot Nothing Then
        Dim oBox As Box
        oBox = CType(e.Item.DataItem, Box)

        If oBox IsNot Nothing Then
                e.Item.Attributes.Add("onclick", "GetImage('" + oBox.ID.ToString() + "','" + oBox.Name + "');")                
        End If           
    End If
End Sub

aspx 页面中,我有以下内容:

<div id="divInfo" style="overflow: auto; overflow-x: hidden; width: 100%; height: 330px;">
    <table width="98%" cellspacing="0" cellpadding="0">
        <tr>
            <td>
                <table width="100%">
                    <tr>
                        <td>
                            <div id="divZoomSlider" style="overflow: auto;">
                                <asp:Image ID="imgRectoImg" runat="server" Width="700px" Height="300px" oncontextmenu="ZoomOutImage(this);return false;"
                                    onclick="ZoomInImage(this);"/>
                                <asp:Image ID="imgVersoImg" runat="server" Width="700px" Height="300px" oncontextmenu="ZoomOutImage(this);return false;"
                                    onclick="ZoomInImage(this);"/>
                            </div>
                        </td>
                        <td align="right" valign="bottom">
                            <input type="image" onclick="return FlipImage();" src="../Images/recto-verso-impression-icone-8241-32.png" />
                        </td>
                    </tr>
                </table>
            </td>
        </tr>
    </table>
</div>

此外,在 header 中,我从每一行中调用了 javascript 代码 onclick

function GetImage(sID, sName) {
    try {
        var oimgRectoImg = document.getElementById("imgRectoImg");
        var oimgVersoImg = document.getElementById("imgVersoImg");
        oimgRectoImg.imageURL = "~/ImageDisplay.aspx?ID=" + sID + "&Mode=FULLSIZE&IMAGEDISPLAY=RECTO&TYPE=Out";
       // alert(oimgRectoImg.imageURL);
        oimgVersoImg.imageURL = "~/ImageDisplay.aspx?ID=" + sID + "&Mode=FULLSIZE&IMAGEDISPLAY=VERSO&TYPE=Out";
        //alert(oimgVersoImg.imageURL);
    } catch (e) {
        alert("GetImage: " + e.message);
    }
}    

我已经通过这些警报确定我的点击事件已被触发。我还访问了警报中显示的 url 以确保一切正常。

我的问题是,当我单击数据网格中的任何给定行时,没有显示任何图像。我觉得我错过了一些东西,比如刷新页面或以某种方式刷新 asp:Image 以从使用 javascript 代码分配的新 imageUrl 加载图像。我不确定如何修复它,因为我对 front-end 开发没有什么经验。

imageURL 只是服务器端 属性。

ASP.NET标签只是被ASP.NET引擎改成了HTML然后发送给浏览器,浏览器只能读取HTML。

在呈现的 HTML 中,包含 URL 的属性称为 "src"。参见 https://developer.mozilla.org/en-US/docs/Web/HTML/Element/img

因此将imageURL改为src如下

 var oimgRectoImg = document.getElementById("imgRectoImg");
 var oimgVersoImg = document.getElementById("imgVersoImg");
 oimgRectoImg.src = "/ImageDisplay.aspx?ID=" + sID + "&Mode=FULLSIZE&IMAGEDISPLAY=RECTO&TYPE=Out";
 oimgVersoImg.src = "/ImageDisplay.aspx?ID=" + sID + "&Mode=FULLSIZE&IMAGEDISPLAY=VERSO&TYPE=Out";

我想应该可以解决你的问题。