Доступ к значениям Linq в ViewData - PullRequest
0 голосов
/ 19 марта 2010

У меня проблемы с доступом к значениям id , area и theme в моих данных ViewData.

Они устанавливаются в моем фильтре действий, но когда я попадаю на сайт. У меня нет доступа к ним.

Любая помощь или совет будут великолепны.

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 Ответ

3 голосов
/ 19 марта 2010

Повторное редактирование на основе ваших отзывов ...

Я думаю, вам лучше всего создать ViewModel, чтобы вы могли строго набирать ваш View.

Создайте класс, подобныйследующее (вы можете добавлять поля по мере необходимости):

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);
    }
%>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...