2013-06-12 25 views
0

我得到了一个业务层,它返回一个匿名对象,该对象具有包含日期​​的行集合。我想要获取日期的区域格式,但我不想将区域设置传递到业务层,而是将格式保存在MVC网站的Controller Action中。格式化匿名对象中的集合的日期

商务层:

public object GetItems(int catID) 
{ 
var data = GetDbItems(catId).ToList(); 
var Items = new 
     { 
      total = data.Count(), 
      page = 1, 
      rows = (from c in data 
        select new { 
         ID = c.id, 
         Desc = c.desc, 
         CreationDate = c.CreationDate 
        }) 
     }; 

return Items; 
} 

早在控制器的操作方法我想格式化集合中的日期匿名类型的内部。我怎样才能做到这一点?

public JsonResult GetItems(int catID) 
{ 
string cultureString = HttpContext.Request.UserLanguages.FirstOrDefault(); 
DateTimeFormatInfo dtfi = CultureInfo.CreateSpecificCulture(cultureString).DateTimeFormat; 
var items = bizLayer.GetItems(catID); 
var test = from i in items 
     select i.rows; // ???? doesn't know about this collection yet. 
} 

我想要做什么。

获得的匿名类型的集合行,找到为止柱,并用

CreateDate = c.CreateDate.ToString("d", dtfi) 
+0

返回匿名对象的业务层是一个坏主意,使用强类型模型将使您的生活变得更加轻松。 –

+0

感谢所有答复,我不知道投票的答案。我现在清楚,我继承的代码库有一个模糊的SoC。我需要做一个快速解决,但现在看起来好像还有更多工作可以让事情变得更好。 – matthewbaskey

回答

2

我得到了它返回一个匿名对象

这可能需要进行固定,并通过一个强类型的模型替换该匿名对象的第一件事,这将大大简化这个映射业务层将域模型转换为视图模型以执行所需的格式。

+0

没有解决方法:使用动态关键字或使用某种类型的Cast生成匿名方法:http://msmvps.com/blogs/jon_skeet/archive/2009/01/09/horrible-grotty-hack -returning-an-anonymous-type-in​​stance.aspx – matthewbaskey

1

你不能格式化。您需要创建一个具有与匿名对象相同属性的具体类并传回YourNewClass而不是object

0

为什么业务层返回一个匿名对象肯定含糊不清,你应该先解决。但是,如果你不能把你得到的最佳镜头解析成DateTime;然后将这些信息重新用于其余行。

+0

我如何将每个元素解析为Controller Action层中的DateTime。 – matthewbaskey