我正忙于homecontroller.cs(在一个MVC Razor项目中),在那里我发送了一个类似下面的类的视图:
private class Evt
{
public SEvent Event { get; set; }
public String Duration { get; set; }
};
public ActionResult Index()
{
List<SEvent> modFromWcf = proxy.GetAllEventsByPeriod(@System.DateTime.Now.Year, @System.DateTime.Now.Year + 1, "EN").ToList();
List<Evt> modTosend = new List<Evt>();
foreach (SEvent item in modFromWcf)
{
Evt ES = new Evt();
ES.Event = item;
ES.Duration = GetDuration(item.StartDate ,item.EndDate);
modTosend.Add(ES);
};
return View("Index", modTosend);
}
SEvent只是另一个类。
在我看来,我尝试使用某些属性做一些事情,但我不知道如何检索该类Event的值。这是我的代码:
@{
foreach (var item in ViewData.Model) {
string year = item.Event.StartDate.Year.ToString();
}
....
}
我收到的错误是:'object'不包含'Event'的定义。但是我可以调试并看到该项目包括一个类Event和一个字符串Duration。我也可以看到内容。有人知道如何检索,例如item.Event.StartData ??
答案 0 :(得分:0)
您需要将item
投射到您的班级。
ViewData
的类型为ViewDataDictionary
,它实现IDictionary<string, Object>
,表示它是一个字典,类型string
的键与类型object
的值匹配。
使用它来使代码按原样运行:
@{
foreach (var item in ViewData.Model) {
string year = ((Evt)item).Event.StartDate.Year.ToString();
}
....
}
但是,您应该使用强类型视图,而不是将数据推送到ViewData
。
答案 1 :(得分:0)
您需要明确定义项目
ViewData.Model
将返回一组对象,而对象没有Event属性。
这样的事情应该有效:
@{
foreach (var item in ViewData.Model) {
if (item is Evt){
Evt itemEvt = (Evt)item;
string year = itemEvt.Event.StartDate.Year.ToString();
}
}
//...
}
虽然我经常这样做:
@{
foreach (Evt item in ViewData.Model) {
string year = item.Event.StartDate.Year.ToString();
}
//....
}