我正在从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'
答案 0 :(得分:2)
您的代码中存在一些错误。
CountryModel
类,并在操作中选择这些模型的列表,如果使用匿名类型,则无法在视图中使用它。 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>
}
答案 1 :(得分:0)
ViewBag没有强类型,因此MVC不知道您的item
是Country
,并且只将其视为对象。
试试这个:
@foreach (var item in ViewBag.countries)
{
<td><label class="control-label">@(((Country)item).Name)</label></td>
}