Добавление Viewbag в текущем представлении - PullRequest
0 голосов
/ 02 июля 2019

Я пытаюсь посмотреть, смогу ли я добавить ViewBag, чтобы получить другой результат базы данных в список просмотра, который у меня уже есть.Ниже я пытаюсь сделать это в контроллере и посмотреть: это правильный подход?

Controller.cs:

    public ActionResult Branch(string Branch)
    {
        ViewBag.BranchName = Branch;
        var result = from c in db.Branches select c;
        ViewBag.Data1 = result;

        var employees = from m in db.Employees
                where m.Branch == Branch || Branch == null || Branch == "" select m;

        return View(employees.ToList());

    }

View.cshtml:

    ...

    @foreach (var item in ViewBag.Data1 as IEnumerable<Test.Models.Employee>)
    {
        @Html.DisplayFor(modelItem => item.name);
    }

    ...

1 Ответ

0 голосов
/ 02 июля 2019

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