我无法访问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);
}%>
答案 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);
}
%>