Вы, безусловно, можете сохранить результат вашего запроса Linq в переменной ViewBag и использовать его так же, как и в любом другом случае.
Единственное препятствие, с которым вы можете столкнуться с предоставленным вами кодомРазве компилятор может не понимать класс Employee
(или вы имели в виду Branch
, основываясь на вашем примере кода?).
Чтобы исправить это, у вас есть несколько вариантов:
Обновите файл Web.Config в каталоге Views, чтобы при создании всех ваших представлений использовалось пространство имен Test.Models
:
Views / Web.Config:
<system.web.webPages.razor>
<pages ...>
<namespaces>
...
<add namespace="Test.Models" />
...
</namespaces>
</pages>
</system.web.webPages.razor>
Добавьте @using Test.Models
к вершине представлений, которым необходимо использовать пространство имен.
Полностью забудьте ViewBag
, строго введя свой вид в класс viewmodel и вставиввсе, что вам нужно для доступа из представления в вашей viewmodel:
ViewModel.cs (новый):
using Test.Models;
namespace Test.ViewModels
{
public class BranchViewModel
{
public string BranchName { get; set; }
List<Employee> Employees { get; set; }
List<Branch> Branches { get; set; }
}
}
Controller.cs (обновлено):
using Test.ViewModels;
using Test.Models;
...
public ActionResult Branch(string Branch)
{
IEnumerable<Employee> employees = from m in db.Employees
where m.Branch == Branch || Branch == null || Branch == ""
select m;
IEnumerable<Branches> branches = from c in db.Branches
select c;
var viewModel = new BranchViewModel()
{
BranchName = Branch,
Employees = employees.ToList(),
Branches = branches.ToList()
};
return View(viewModel);
}
View.cshtml (обновлено):
@model Test.ViewModels.BranchViewModel
...
@foreach (var branch in Model.Branches)
{
@Html.Display(branch.name)
}
...