2014-11-23 2 views
0

У меня есть следующие в моем контроллере:Почему ViewBag не отображает результат запроса правильно?

public ActionResult Index(int? id) 
    { 
     int projectId = (int)id; 

     //Get the project name to use in the view 
     var projName = from p in db.Projects where p.ID == id select p.ProjectName; 
     ViewBag.projectName = projName.ToString(); 

//Rest of code ommitted 

И на мой взгляд:

<p>There are no actors for the @ViewBag.projectName yet.</p> 

Проблема в том, на мой взгляд оказывает следующее, вместо моего имени проекта:

Пока нет актеров для SELECT [Extent1].[ProjectName] AS [ProjectName] FROM [dbo].[Project] AS [Extent1] WHERE [Extent1].[ID] = @p__linq__0.

Я попытался изменить код на ViewBag.projectName = projecName.ToList(); согласно этому вопросу Passing query results in a viewbag но оказывает:

There are no actors for the System.Collections.Generic.List1[System.String] еще.

Что я здесь делаю неправильно?

Помогите оценить очень.

ответ

1

projName в настоящее время является объектом IQueryable, как и у вас есть.

Необходимо выполнить EXECUTE запрос к db и сохранить результат в свойстве ViewBag.projectName.

Switching вашей var projName = from p in db.Projects where p.ID == id select p.ProjectName; линии к следующему должно решить эту проблему:

var projName = db.Projects.Find(id).ProjectName; 

(это предполагает, что ID является первичным ключом для projects - если нет, то использовать что-то вроде db.Projects.Where(p => p.ID == id).First().Select(p=>p.ProjectName); вместо)

+0

Это работало благодаря :-) Ты спас мое воскресенье. Выключение линии, как вы предполагали, означало, что я мог бы просто использовать «ViewBag.projectName = projName;». (На всякий случай, если кто-то еще прочтет это в будущем, имея аналогичную проблему). – gazrolo4

Смежные вопросы