強類型ASP.NET數據綁定改進版之第2版
相關文章:教你30秒打造強類型ASP.NET數據綁定、強類型ASP.NET數據綁定改進版
之前的方法存在一個問題:
Ivony...說:“每個類型都去寫個Eval方法也很不爽的。”
Kingthy說:“這樣就到處有Func了,會不會太過頭了?”
李永京說:“在項目中任何地方都要使用的方法,應該收集在Core級別的Dll中寫成擴展方法。”
如果用擴展方法解決這個問題,我們將面臨新的問題,請看擴展方法:
public static class Binder
{
public static TResult Eval<TEntity, TResult>(this System.Web.UI.Page p,
Func<TEntity, TResult> func)
{
return func((TEntity)p.GetDataItem());
}
}
{
public static TResult Eval<TEntity, TResult>(this System.Web.UI.Page p,
Func<TEntity, TResult> func)
{
return func((TEntity)p.GetDataItem());
}
}
這個問題就是在調用時,需要指定返回類型,比如:
<%# this.Eval<NewsInfo, string>(n => n.Title) %>
可以采用另外一種方法解決這個問題,代碼如下:
public static class Binder<TEntity> where TEntity : class
{
public static TResult Eval<TResult>(System.Web.UI.Page p,
Func<TEntity, TResult> func)
{
return func((TEntity)p.GetDataItem());
}
}
{
public static TResult Eval<TResult>(System.Web.UI.Page p,
Func<TEntity, TResult> func)
{
return func((TEntity)p.GetDataItem());
}
}
調用代碼如下:
<%# Binder<NewsInfo>.Eval(this, n => n.Title) %>
還有更好的解決方法嗎?我目前只能找到這個方法,我覺得理想的調用方法應該是:
<%# Eval<NewsInfo>(n => n.Title)%>
全站熱搜