2014-03-07 27 views
3

我从数据库中检索国家的名称和ID并将其设置在Viewbag中。但是,当我从视图访问它的投掷错误。无法从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

你在你的代码中的一些错误。

  1. 您应该创建CountryModel类,并在你的行动选择这些车型的名单,在使用你不能在视图中使用它anonymus类型的情况。
  2. 我建议你不要用ViewBag来传递数据来查看,最好的方法是使用Model。

型号:

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>  
} 
+0

谢谢你..它的工作。:) – user3206357

0

的ViewBag不是强类型,所以MVC没有按不知道你的itemCountry,只把它看作一个对象。

试试这个:

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

如果我米使用你的代码,然后收到此错误: - 无法施展的对象键入'<> f__AnonymousType1f'2 [System.String,System.Int64]'键入'Assetry.Model.Country'。 – user3206357

+0

你的代码是错误的,你应该将ViewBag.countries转换为IEnumerable ,而不是item。 – alexmac

+0

好的..谢谢你.. – user3206357