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

本文关键字:属性 嵌套 检索 视图 | 更新日期: 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投到你的类中。

ViewDataViewDataDictionary 类型,它实现了IDictionary<string, Object>,表明它是一个字典,将 string 类型的键与 object 类型的值匹配。

使用此选项可以使代码按原样运行:

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

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