C# 无法在.ascx中使用“var”变量?

C# 无法在.ascx中使用“var”变量?,c#,.net,C#,.net,在.ascx.cs上,我有以下代码,例如: var xDoc = XDocument.Parse(xml); //or XDocument.Load(fileName) var list = xDoc.Descendants("ordinanza") .Select(n => new { Numero = n.Element("numero").Value,

在.ascx.cs上,我有以下代码,例如:

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();
好的,现在我想在我的.ascx上foreach这个匿名类型,但我不能对列表使用protected/public,因为它是var


那么,我该怎么做呢?

您提取的数据是一个更大实体的精简版本,并且您正在视图中使用这些数据。在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 };

您提取的数据是较大实体的精简版本,并且您正在视图中使用此数据。在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 };


您希望如何在ascx标记上对其进行foreach?为什么不在codebehind中这样做呢?因为我需要根据该查询中的数据编写HTML代码。我不喜欢将HTML写入字符串/字符串生成器…但是ASP.NET的正常方式是使用webdatabound控件,如repeater,不生成HTML,而是将控件放入SF.e。ItemTemplate中的自定义UserControls。@TimSchmelter:你能给我举个例子,使用var作为Repeater的源数据吗?将匿名类型绑定到web数据绑定控件(如Repeater或GridView)不是问题。你甚至不需要给托利斯打电话。例如:repeater.DataSource=xDoc.genderantsordinanza.Selectn=>new{Numero=n.Elementnumero.Value,Titolo=n.Elementtitolo.Value,};您希望如何在ascx标记上对其进行foreach?为什么不在codebehind中这样做呢?因为我需要根据该查询中的数据编写HTML代码。我不喜欢将HTML写入字符串/字符串生成器…但是ASP.NET的正常方式是使用webdatabound控件,如repeater,不生成HTML,而是将控件放入SF.e。ItemTemplate中的自定义UserControls。@TimSchmelter:你能给我举个例子,使用var作为Repeater的源数据吗?将匿名类型绑定到web数据绑定控件(如Repeater或GridView)不是问题。你甚至不需要给托利斯打电话。例如:repeater.DataSource=xDoc.genderantsordinanza.Selectn=>new{Numero=n.Elementnumero.Value,Titolo=n.Elementtitolo.Value,};是的……但是var的使用消失了:这不是一件好事吗?:-对于您指定的问题,我不能在方法之间传递匿名对象,并且期望它们的行为像强类型对象一样,我的解决方案是传递强类型对象。使用var非常有用!另外,如果我能像Tim Schmelter建议的那样将其与中继器一起使用,那会很好,不是吗?如果您绑定到匿名类型的集合,那么使用var就可以了。但是,如果希望在方法之间传递集合,则可能会出现问题。这实际上取决于您在使用匿名类型集合时的使用情况。它们最好是短命的。不要认为var就是你想要的。看起来你想要一个动态对象。是的……但是var的使用消失了:这不是一件好事吗?:-对于您指定的问题,我不能在方法之间传递匿名对象,并且期望它们的行为像强类型对象一样,我的解决方案是传递强类型对象。使用var非常有用!另外,如果我能像Tim Schmelter建议的那样将其与中继器一起使用,那会很好,不是吗?如果您绑定到匿名类型的集合,那么使用var就可以了。但是,如果希望在方法之间传递集合,则可能会出现问题。这实际上取决于您在使用匿名类型集合时的使用情况。它们最好是短命的。不要认为var就是你想要的。似乎您想要一个动态对象。