访问ViewData中的Linq值

时间:2010-03-19 12:33:41

标签: asp.net-mvc linq

我无法访问ViewData中的 id 区域主题值。

他们正在我的动作过滤器中设置,但是当我到达Site.Master时,我无法访问它们。

任何帮助或建议都会很棒。

ActionFilter

public override void OnActionExecuting(ActionExecutingContext filterContext)
{
    int SectionID = Convert.ToInt32(filterContext.RouteData.Values["Section_ID"]);
    int CourseID = Convert.ToInt32(filterContext.RouteData.Values["Course_ID"]);

        if (CourseID == 0)
        {
            filterContext.Controller.ViewData["Styles"] = (from m in _dataContext.Styles where m.Area_ID == SectionID select new {theme = m.Area_FolderName }).ToList();
        }
        else
        {
            filterContext.Controller.ViewData["Styles"] = (from m in _dataContext.Styles where m.Course_ID == CourseID select new { theme = m.Course_FolderName }).ToList();
        }
    }
}

的Site.Master

<%@ Master Language="C#" Inherits="System.Web.Mvc.ViewMasterPage" %>
<%@ Import Namespace="Website.Models" %>

    <%       
        foreach (var c in (IEnumerable<Styles>)ViewData["Styles"])
       {
        Response.Write(c.Theme);
    }%>

1 个答案:

答案 0 :(得分:3)

根据您的反馈再次编辑...

我认为您最好通过创建ViewModel来提供服务,以便您可以强烈输入您的视图。

创建如下所示的类(可以根据需要添加字段):

public class StyleViewModel
{
    public string Id {get; set;}
    public string Area {get; set;}
    public string Theme {get; set;}
}

然后在你的控制器中:

filterContext.Controller.ViewData["Styles"] = 
    (from m in _dataContext.Styles 
    where m.Area_ID == SectionID
    select new StyleViewModel
    {
        Id = m.Area_ID
        Area = m.Area_Name
        Theme = m.Area_FolderName
    }).ToList();

然后,您可以清理视图中的代码:

<% 
    foreach (var c in Model)
    {
        Response.Write(c.Theme);
    }
%>