2012-10-18 40 views
0

在.ascx.cs我有这样的代码,例如:不能在.ascx中使用“var”变量?

var xDoc = XDocument.Parse(xml); //or XDocument.Load(fileName) 
var list = xDoc.Descendants("ordinanza") 
       .Select(n => new 
       { 
        Numero = n.Element("numero").Value, 
        Titolo = n.Element("titolo").Value, 
       }) 
       .ToList(); 

好,现在我愿意“的foreach”这个匿名在我的.ascx类型,但我不能使用保护/公为list(因为是var)。

那么,我该怎么做呢?

+0

你怎么想“ 'foreach'“它在ascx标记?你为什么不在隐藏代码中这样做? –

+0

由于该custQuery中的数据,我需要编写HTML代码。我讨厌将HTML写入字符串/字符串构建器...... – markzzz

+0

但是,正常的ASP.NET方式是使用像repeater这样的webdatabound控件,并且不会生成html,而是将控件(即自定义UserControls)放在一个'ItemTemplate'中。 –

回答

3

您正在提取的数据是较大实体的精简版本,您正在视图中使用这些数据。这在MVC或MVP术语中将是视图模型(用于在UI中显示数据的一种数据传输对象)。

你可以做的是创建一个简单的轻量级类(视图模型)来保存这些数据:

public CustomerContactViewModel() 
{ 
    public string Name { get; set; } 

    public string Phone { get; set; } 
} 

,然后更新您的LINQ查询:

IEnumerable<CustomerContactViewModel> custQuery = 
    from cust in customers 
    where cust.City == "Phoenix" 
    select new CustomerContactViewModel() { Name = cust.Name, Phone = cust.Phone }; 
+1

是的......但是使用“var”消失:) – markzzz

+0

这不是件好事吗? :-)根据你指定的问题“我不能在方法之间传递匿名对象,并期望它们像强类型对象一样”,我的解决方案是“传递强类型对象”。 –

+0

使用“var”很有用!另外,如果我可以使用Repeater(正如Tim Schmelter所建议的那样)会不错,是不是? – markzzz