如何在视图中检索嵌套类的属性值
本文关键字:属性 嵌套 检索 视图 | 更新日期: 2023-09-27 18:33:44
我正忙于我的家庭控制器.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();
}
....
}
我收到的错误是:"对象"不包含"事件"的定义。但是我可以调试并看到该项目确实由类事件和字符串持续时间组成。我也可以看到内容。有人知道我如何检索例如项目吗?Event.StartData??
您需要显式定义项目。
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();
}
//....
}
你需要
把item
投到你的类中。
ViewData
是 ViewDataDictionary
类型,它实现了IDictionary<string, Object>
,表明它是一个字典,将 string
类型的键与 object
类型的值匹配。
使用此选项可以使代码按原样运行:
@{
foreach (var item in ViewData.Model) {
string year = ((Evt)item).Event.StartDate.Year.ToString();
}
....
}
但是,您可能应该为此使用强类型视图,而不是为此将数据推入ViewData
。