我喜欢处理和比较我的中继器中的很多日期时间,即使我必须使用相同的工作多次。
有点难看,要在Eval("MyDate")
((DateTime)Eval("MyDate"))
之处投放,以减去2个日期时间或比较它,即使你必须在一次操作中做到这一点。
我想在转发器启动时保存var中的所有evals?
DateTime mydt1 = Eval("myDate");
DateTime mydt2 = Eval("mydate");
之后,在整个中继器中进行任何操作都很容易。希望你理解我的想法。这可能吗?我尝试过短暂但每次都有错误。
mydt1 - mydt2....
谢谢你,并致以最诚挚的问候。
答案 0 :(得分:3)
您可以使用DateTimes作为参数从转发器调用页面代码后面的方法。如果目标是创建一个更清洁的aspx页面,那么可以在后面的代码中完成构建逻辑。
示例ASPX:
<asp:Repeater ID="Repeater1" runat="server">
<ItemTemplate>
<asp:Literal
ID="Literal1"
runat="server"
Text='<%# DateFoo(Eval("myDate1"), Eval("myDate2")) %>' />
</ItemTemplate>
</asp:Repeater>
示例C#代码背后:
protected string DateFoo(Object o1, Object o2)
{
DateTime? dt1 = o1 as DateTime?;
DateTime? dt2 = o2 as DateTime?;
// Do logic with DateTimes
return "string";
}
答案 1 :(得分:1)
如果您想为转发器添加更多逻辑,我建议您将绑定逻辑移到后面的代码中:
ASPX:
<asp:Repeater id="myRepeater" runat="server">
<ItemTemplate>
<asp:Literal id="myLiteral" runat="server" />
</ItemTemplate>
</asp:Repater>
CS:
protected override void OnInit(EventArgs e)
{
myRepeater.ItemDataBound += myRepeater_ItemDataBound;
base.OnInit(e);
}
void myRepeater_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
// this method will be invoked once for every item that is data bound
// this check makes sure you're not in a header or a footer
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
// this is the single item being data bound, for instance, a user, if
// the data source is a List<User>
User user = (User) e.Item.DataItem;
// e.Item is your item, here you can find the controls in your template
Literal myLiteral = (Literal) e.Item.FindControl("myLiteral");
myLiteral.Text = user.Username + ", " + user.LastLoginDate.ToShortDateString();
// you can add any amount of logic here
// if you need to use it, e.Item.ItemIndex will tell you what index you're at
}
}
答案 2 :(得分:1)
我讨厌激情的逃避。 这就是为什么我使用这段代码永远摆脱它们并回到强类型:
public static class DataItemExtensions
{
public static T As<T>(this IDataItemContainer repeater) where T : class
{
return (T)repeater.DataItem;
}
public static dynamic AsDynamic(this IDataItemContainer repeater)
{
return repeater.DataItem;
}
}
然后像这样使用它:
<asp:Repeater runat="server" DataSource="<%# this.MyObjectCollection %>">
<ItemTemplate>
<%# Container.As<MyObject>().DateTime %>
</ItemTemplate>
</asp:Repeater>
请注意,如果您像我一样使用数据源,则需要在页面上使用this.DataBind()。