1

我忙于我的 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();
    }
    ....
}

我收到的错误是:“对象”不包含“事件”的定义。但我可以调试并看到该项目确实由一个类事件和一个字符串持续时间组成。我也可以看到内容。有人知道我如何检索例如 item.Event.StartData 吗?

4

2 回答 2

0

你需要投到item你的班级。

ViewDatais 的 type ViewDataDictionary,它实现IDictionary<string, Object>,表明它是一个字典,将 type 的键匹配到 typestring的值object

使用它使您的代码按原样运行:

@{ 
    foreach (var item in ViewData.Model) {
    string year = ((Evt)item).Event.StartDate.Year.ToString();
    }
    ....
}

但是,您可能应该为此使用强类型视图,而不是为此塞入数据ViewData

于 2012-05-10T21:30:09.453 回答
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();
    }
    //....
}
于 2012-05-10T21:32:18.677 回答