2013-08-17 70 views
0

现在,我使用这个代码是工作,但一旦Image.aspx是不是在同一个目录中,因为它没有在一家404图像我想用的image.aspx通用于所有图像,并尽可能将其保留在顶层目录中。C#asp.net图片廊查询字符串

列表视图页:

<div class="datapager"> 
    <asp:DataPager ID="DataPager1" runat="server" PageSize="20" 
    PagedControlID="Listview1" QueryStringField="PageID"> 
     <Fields> 
      <asp:NextPreviousPagerField ButtonType="Button" 

    ShowFirstPageButton="False" 
       ShowNextPageButton="False" ShowPreviousPageButton="True" 
    ShowLastPageButton="False" ButtonCssClass="PagerField" PreviousPageText="&#171; 
    Previous" /> 
      <asp:NumericPagerField CurrentPageLabelCssClass="NumericPagerField" 
    ButtonCount="10" NextPageText="More" PreviousPageText="More" /> 
      <asp:NextPreviousPagerField ButtonType="Button" ShowLastPageButton="False" 
       ShowNextPageButton="True" ShowPreviousPageButton="False" 
    ShowFirstPageButton="False" ButtonCssClass="PagerField" NextPageText="Next&#187;"/> 
     </Fields> 
    </asp:DataPager>  
    </div> 
    <div class="topadcell">Amazon Ad</div> 
    <asp:listview ID="Listview1" runat="server" 
     onpagepropertieschanging="Listview1_PagePropertiesChanging" > 
     <ItemTemplate> 
     <li> 
     <asp:HyperLink ID="lnkImage" Tooltip='<%# Eval("Name") %>' runat="server" 
    NavigateUrl='<%# Eval("Name","~/Image.aspx?Name=/Images/yeah/a/directory/{0}")%>' > 
     <asp:Image ID="Image1" runat="server" ImageUrl='<%# Eval("Name", "~/Images/yeah/a 
     /directory/{0}") %> ' alt='<%# Eval("Name") %>' 
    Width="125" CssClass="picborder"> 
     </asp:Image></asp:HyperLink></li> 
     </ItemTemplate> 
     <LayoutTemplate> 
     <ul ID="itemPlaceholderContainer" runat="server" class="gallery" > 
     <li id="itemPlaceholder" runat="server" ></li> 
     </ul>   
    </LayoutTemplate> 
    </asp:listview> 
     <div class="datapager"> 
    <asp:DataPager ID="DataPager2" runat="server" PageSize="20" 
    PagedControlID="Listview1" QueryStringField="PageID"> 
     <Fields> 
      <asp:NextPreviousPagerField ButtonType="Button" 
    ShowFirstPageButton="False" 
       ShowNextPageButton="False" ShowPreviousPageButton="True" 
    ShowLastPageButton="False" ButtonCssClass="PagerField" PreviousPageText="&#171; 
    Previous"/> 
      <asp:NumericPagerField CurrentPageLabelCssClass="NumericPagerField" 
    ButtonCount="10" NextPageText="More" PreviousPageText="More" /> 
      <asp:NextPreviousPagerField ButtonType="Button" ShowLastPageButton="False" 
       ShowNextPageButton="True" ShowPreviousPageButton="False" 
    ShowFirstPageButton="False" ButtonCssClass="PagerField" NextPageText="Next&#187;"/> 
     </Fields> 
    </asp:DataPager> 

的的.cs页:

 private void BindListImages() 
{ 
    int i = 0; 
    DirectoryInfo dir = new DirectoryInfo(MapPath("~/Images/yeah/a/directory/")); 
    FileInfo[] file = dir.GetFiles(); 
    System.Collections.ArrayList list = new System.Collections.ArrayList(); 
    foreach (FileInfo file2 in file) 
    { 
     if (i <= 6000) 
     { 
      if (file2.Extension == ".jpg" || file2.Extension == ".jpeg" || 
file2.Extension == ".JPG" || file2.Extension == ".gif") 
      { 
       list.Add(file2); 
       i++; 
      } 
     } 

    } 
    Listview1.DataSource = list; 
    Listview1.DataBind(); 

} 

public class Person 
{ 
    public string Name { get; set; } 
} 
    protected void Listview1_PagePropertiesChanging(object sender, 
PagePropertiesChangingEventArgs e) 
{ 

    DataPager1.SetPageProperties(e.StartRowIndex, e.MaximumRows, false); 
    DataPager2.SetPageProperties(e.StartRowIndex, e.MaximumRows, false); 
    BindListImages(); 


} 

    protected void Page_Init(object sender, EventArgs e) 
    { 

     BindListImages(); 
    } 

的image.aspx页:

 <span class="imagewarpper"> 
<img id="fullsize" src='<%# Request.QueryString["Name"]%>' 
alt='<%=Request.QueryString["Name"] %>' title="<%= Request.QueryString["Name"] %>" 
class="picture"/> 
</span> 

回答

0

的快速和肮脏的解决办法是改变image.aspx文件为了使它完全指向图像文件。

假设图像存储在/resources/img文件夹中;那么代码是这样的:

<span class="imagewarpper"> 
<img id="fullsize" src='/resources/img/<%# Request.QueryString["Name"]%>' 
alt='/resources/img/<%=Request.QueryString["Name"] %>' 
title="<%= Request.QueryString["Name"] %>" class="picture"/> 
</span> 

通知SRCALT参数是如何接收到由与参数名一起渲染一些额外的代码。

有实现这个更好的方式,但我认为这是非常明显的向你展示了必要的修改。

+0

这将意味着还在编辑image.aspx,我有,只要我加上“〜/图片/耶工作/ a/directory /“添加到image.aspx上的<%= Request.QueryString [”Name“]%>的开头,然后将image.aspx放在与我很酷的图像相同的目录中,一旦我尝试放入image.aspx在主目录中打破。我希望这是有道理的? – BrianCizMe

+0

是的,它确实有道理,但理论上它会因为前导斜杠(/)而顺利运行。请注意,它与tilde-slash(〜/)不一样,你可以在这里查看(http://stackoverflow.com/questions/6424114/slash-vs-tilde-slash-in-style-sheet-path-in -Asp网)。在这种情况下,您可以将您的应用程序根路径修改为站点根路径格式。 – OnoSendai

+0

感谢您的帮助。我尝试了你的上面的方法,图片也没有加载到Image.aspx页面上。我通过在图库页面上使用此NavigateUrl ='<%#Eval(“Name”,“〜/ Image.aspx?Name = Images/yeah/a/directory/{0}”)%>'>得到了这个工作。我删除了Images/yeah/a /目录前面的路径中的/。你提到“快速和肮脏”,我希望这是干净的。有什么建议么。现在,我的替代和标题标签现在会提供完整的图像路径,而不仅仅是我想要的图像名称。谢谢。 – BrianCizMe

0

得到了这个想法,并认为我会把这里给任何正在阅读这个需要帮助的人。后面的代码保持不变我只在每个页面上改变了一些东西。

列表视图页:

 <ItemTemplate> 
    <li> 
    <asp:HyperLink ID="lnkImage" Tooltip='<%# Eval("Name") %>' runat="server" NavigateUrl='<%# Eval("Name", "~/Image.aspx?Image1=Images/yeah/a/directory/{0}&Name={0}") %>' > 
    <asp:Image ID="Image1" runat="server" ImageUrl='<%# Eval("Name", "~Images/yeah/a/directory/{0}") %> ' alt='<%# Eval("Name") %>' Width="125" CssClass="picborder"> 
    </asp:Image></asp:HyperLink></li> 
    </ItemTemplate> 

的Image.aspx页:

<img id="fullsize" src='<%= Request.QueryString["Image1"]%>' alt='<%= Request.QueryString["Name"]%>' title='<%= Request.QueryString["Name"]%>' class="picture"/>