无法从Viewbag项检索属性

时间:2014-03-07 06:36:59

标签: c# asp.net-mvc

我正在从db检索国家/地区的名称和ID,并在Viewbag中进行设置。但是,当我从视图中访问它时,它会抛出错误。

这是C#代码: -

var country = from x in db.Territories select new 
                 {
                  x.Name,
                  x.ID
                 };
 ViewBag.countries = country;

查看页码: -

@foreach (var item in ViewBag.countries)
{                
   <td><label class="control-label">@item.Name</label></td>    
}

错误: -

Microsoft.CSharp.RuntimeBinder.RuntimeBinderException: 'object' does not contain a definition for 'Name'

2 个答案:

答案 0 :(得分:2)

您的代码中存在一些错误。

  1. 您应该创建CountryModel类,并在操作中选择这些模型的列表,如果使用匿名类型,则无法在视图中使用它。
  2. 我建议您不要使用ViewBag传递数据进行查看,最好的方法是使用Model。
  3. 型号:

    public class CountryModel
    {
        public int Id {get;set;}
        public string Name {get;set;} 
    }
    

    动作:

    var countries = (
        from x in db.Territories 
        select new CountryModel
           {
              Name = x.Name,
              Id = x.ID
           }).ToList();
    
    return View(countries);
    

    查看:

    @model List<CountryModel>
    @foreach (var item in Model)
    {                
       <td><label class="control-label">@item.Name</label></td>    
    }
    

答案 1 :(得分:0)

ViewBag没有强类型,因此MVC不知道您的itemCountry,并且只将其视为对象。

试试这个:

@foreach (var item in ViewBag.countries)
{                
   <td><label class="control-label">@(((Country)item).Name)</label></td>    
}