在30天内显示图片ASP.NET

时间:2011-12-08 13:40:18

标签: c# asp.net .net

我正在努力建立我的第一个公开.net网站,但我有一点问题。 这是一个网上商店,我想在新产品图片上显示,如果产品不超过当前日期超过30天?

标记:

 <asp:Repeater ID="rptProducts" runat="server">        
        <ItemTemplate>
            <table cellpadding="5" cellspacing="5" class="tblSales">
                <tr>
                    <td>
                        <h3>
                            <asp:Label ID="Label1" Text='<%#Eval("ProductName")%>' runat="server" /></h3>
                        <h2>
              <a  href='<%# "Products.aspx?ID=" + Eval("ProductID") %>'>Read More</a></h2>
                    </td>
                    <td >
                        <h4>
                            <asp:Label ID="Label2" Text='<%#Eval("ProductPrice")%>' runat="server" />,-</h4>      
                            <div> 
<img alt="New product" src="images/NewProduct.png" /><!--This picture should show in 30 days-->
                              </div> 
                    </td>
                </tr>
                <hr />
            </table>
        </ItemTemplate>
</asp:Repeater>

代码隐藏:

public partial class sale : System.Web.UI.Page
{
    ProductsTableAdapter p = new ProductsTableAdapter();

    protected void Page_Load(object sender, EventArgs e)
    {
        GetData();
    }

    protected void GetData()
    {
        rptProducts = p.GetProductsByCategoryID(3);
        rptProducts();        
    }
}

2 个答案:

答案 0 :(得分:5)

编辑:正如用户所说,这可能是一种误解,所以......

如果要过滤添加的项目而不显示它们,请在GetData方法上使用以下LINQ表达式:

rptProducts = p.GetProductsByCategoryID(3).Where(p=>p.ProductAddedDate > DateTime.Now.AddDays(-30));

您需要拥有一个属性(在上面的示例中,我将DateTime ProductAddedDate添加到产品类

如果您不想根据日期显示图像,但只显示其他所有内容:

在转发器的ItemDataBound事件中,您可以设置asp控件(用asp:Image替换静态html,允许您使用Visible属性控制显示,即

<asp:Repeater ID="rptProducts" runat="server" OnItemDataBound="rptProducts_Databound">        
        <ItemTemplate>
            <table cellpadding="5" cellspacing="5" class="tblSales">
                <tr>
                    <td>
                        <h3>
                            <asp:Label ID="Label1" Text='<%#Eval("ProductName")%>' runat="server" /></h3>
                        <h2>
              <a  href='<%# "Products.aspx?ID=" + Eval("ProductID") %>'>Read More</a></h2>
                    </td>
                    <td >
                        <h4>
                            <asp:Label ID="Label2" Text='<%#Eval("ProductPrice")%>' runat="server" />,-</h4>      
                            <div> 
<asp:Image ID="ProdImg" runat="server" AlternativeText="New product" ImageUrl='<%# "~/images/" + Eval("ImageFileName")' Visible="True"/><!--This picture should show in 30 days-->
                              </div> 
                    </td>
                </tr>
                <hr />
            </table>
        </ItemTemplate>
</asp:Repeater>

CS codebehind

protected void rptProducts_Databound(object sender, RepeaterItemEventArgs e)
{
    var imgCtrl = (Image)e.Item.FindControl("ProdImg");
    var dataItem = (Product)e.Item.DataItem;
    imCtrl.Visible = dataItem.ProductAddedDate > DateTime.Now.AddDays(-30);
}

答案 1 :(得分:0)

非常感谢,我找到了如何做到这一点:)感谢你,非常简单,但我的工作。 这是我制作的代码:

 <asp:Image ID="Image2" ImageUrl="~/images/new.png" Visible='<%#GetProductSalesPic(Eval("ProductDate"))%>' runat="server" />  

C#代码:

protected bool GetProductSalesPic(object Date)
    {
        DateTime actDate = (DateTime)Date;
        if (DateTime.Now.AddDays(-30) < actDate)
        {
            return true;
        }
        else
        {
        return false;
        }
    } 

再次,谢谢你,快速而良好的回应:D