如何在视图中检索嵌套类的属性值?

时间:2012-05-10 19:49:09

标签: c# razor

我正忙于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 ??

2 个答案:

答案 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();
    }
    //....
}