How to use asp:image in code behind

馋奶兔 提交于 2019-12-25 18:55:13

问题


I have a problem with rendering asp:image in code behind. First I explain my method: In Default.aspx I just use one label. In code behind I make a string variable and fill it, then I fill the lable.Text by my string variable.
this is my Default.aspx:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default2.aspx.cs" Inherits="test_Default2" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
   <div>
      <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
   </div>
</form>
</body>
</html>

and this is my form load function in Defaul.aspx.cs:

protected void Page_Load(object sender, EventArgs e)
{
    Label1.Text = @"<asp:Image ID='Image1' runat='server'   ImageUrl='~/images/sc/tiraje.jpg' />
                    <br/>
                    <img src='../images/sc/tiraje.jpg' />
                    ";
}

Now this code must render two images. But first image used by asp:image doesn't work! I need to use asp:image in my string variable because my URL changes my result, for example if my URL is:

http://localhost:19551/website/test/Default.aspx

When I give it one "/":

http://localhost:19551/website/test/Default.aspx/ 

The second URL causes to change the src of second image in my string that I use in <img> tag. so that I want to use asp:image because it uses "~/" for src (imageUrl) that never changes by change URL!


回答1:


The Literal control introduced by Abdullah ELEN is the easiest and it works. Like this:

       <asp:Literal ID="Literal1" runat="server"></asp:Literal>

And then in the code behind, assuming you have already captured the image source into a local variable (photo_src), you add this:

        Literal1.Text += "<img src=" + '"' + photo_src + '"' + "/>";



回答2:


You shouldn't be using a label to render the images. Instead place two asp:image controls in the web form or use a placeholder control, such as:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="Application.WebForm1" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:Image runat="server" ID="Image1" />
        <br />
        <asp:PlaceHolder runat="server" ID="PlaceHolder1"></asp:PlaceHolder>
    </div>
    </form>
</body>
</html>

Then you can dynamically create a new image control and set the image urls through codebehind by using their ImageUrl properties:

public partial class WebForm1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            Image1.ImageUrl = "../images/sc/tiraje.jpg";

            Image Image2 = new Image();
            Image2.ImageUrl = "../images/sc/tiraje.jpg";

            PlaceHolder1.Controls.Add(Image2);
        }
    }



回答3:


You cannot create in this way because Asp:Image is a server object. I have prepared for you a simple example below.

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="pageDefault" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
   <div>
      <asp:Literal ID="literalControl" runat="server" />
   </div>
</form>
</body>
</html>

Code-behind

protected void Page_Load(object sender, EventArgs e)
{
    // Write here your SQL query for image URLs..

    while(reader.Read())
        {
            literalControl.Text +=
                "<img src=\"../images/sc/" + reader[0].ToString() + ".jpg\" /><br/>";
        }
}


来源:https://stackoverflow.com/questions/24228010/how-to-use-aspimage-in-code-behind

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!