在eval repeater ASP.NET中显示来自photopath的照片

时间:2013-11-21 18:59:02

标签: c# asp.net

我正在尝试在eval转发器中显示图像,但它不起作用。当我把简单的div而不是asp:Repeater我得到图像路径。 (我对SQL方面没有问题)

有谁知道这段代码有什么问题?

感谢。

<div class="wrapper">
    <asp:Repeater runat="server" ID="Repeater1">
        <ItemTemplate>
                <asp:Image ID="Image1" ImageUrl="<%# Eval("PresidentPhotoPath") %>" runat="server" />
        </ItemTemplate>
    </asp:Repeater>
</div>




SqlConnection cnn = new SqlConnection("Initial Catalog=whitehouse;Data Source=localhost;Integrated Security=SSPI;");

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        cnn.Open();
        SqlCommand cmd = new SqlCommand("SELECT PresidentPhotoPath FROM presidents", cnn);
        SqlDataReader dr = cmd.ExecuteReader();
        Repeater1.DataSource = dr;
        Repeater1.DataBind();
        cnn.Close();
    }
 }

1 个答案:

答案 0 :(得分:2)

这里的ImageUrl语法错误:

ImageUrl="<%# Eval("PresidentPhotoPath") %> "

双引号内有双引号,将外引号更改为单引号,如下所示:

ImageUrl='<%# Eval("PresidentPhotoPath") %>'

至于在文件名之前添加Images/的问题,我建议使用代码隐藏方法为您构建字符串,如下所示:

protected string BuildPath(string photoPath)
{
    return "Images/ + photoPath;
}
  

注意:考虑将这个命名比BuildPath更有用,因为这是非常通用的,只是选择了这个名称,因为没有更好的想法立即浮现在脑海中。

现在在你的标记中你可以调用方法,如下所示:

ImageUrl='<%# BuildPath(Eval("PresidentPhotoPath")) %>'

我推荐这种方法的原因如下:

  • 标记不包含任何复杂的逻辑,只是使用Eval()值的方法调用
  • 调试逻辑与嵌入式代码块相比更容易
  • 当逻辑嵌入到标记的绑定语法中时,您可以利用Visual Studio编译器的强大功能来捕获编译时的语法错误与运行时错误