В одном виде бритвы, как я могу получить значения, переданные из различных методов контроллера? - PullRequest
0 голосов
/ 16 декабря 2018

Я работаю над базовым приложением.

Это основной контроллер:

   public ActionResult Index()
    {
        var all = _context.mainz.ToList();
        var vm = new mainViewModel()
        {
            main_lst = all
        };

        return View(vm);
    }

    public ActionResult Details()
    {
        var dtl = _context.mainz.ToList();
        var vm = new mainViewModel()
        {
            main_lst = dtl
        };
        return View(vm);
    }


       public ActionResult count()
    {
        var ct = (from i in _context.mainz
                  where i.event_title != null
                  select i).ToList();
        var vm = new countVm()
        {
          count = ct
        };
        return View(vm);
    }

В этом контроллере методы Index и Details связаны с двумя различными видами бритвы следующим образом:

Это представление бритвы для индекса

@model testtt.ViewModel.mainViewModel

@{
ViewBag.Title = "Index";
Layout = "~/Views/Shared/_Layout.cshtml";
}



<ul>
@foreach (var item in Model.main_lst)
{
    <li>@item.event_title</li>
}

</ul>

Это представление бритвы для деталей

@model testtt.ViewModel.mainViewModel
@{
ViewBag.Title = "Details";
Layout = "~/Views/Shared/_Layout.cshtml";
 }

<ul>
@foreach (var item in Model.main_lst)
{
   <li>@item.event_description</li>
}
</ul>

Это mainViewModel

namespace testtt.ViewModel
{
public class mainViewModel
{
    public List<main> main_lst { get; set; }
    public mainViewModel()
    {
        main_lst = new List<main>();
    }
}
}

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

@model testtt.ViewModel.countVm
<p>count is @Model.count.Count()</p>

И countVm или (модель представления подсчета) выглядит следующим образом:

namespace testtt.ViewModel
{
public class countVm
{
    public List<main> count { get; set; }
    public countVm()
    {
        count = new List<main>();
    }
}
}

До этого момента все работало нормально. Теперь, в соответствии с требованиями приложения, я должен добавить это частичное представление для всех других видов бритвы следующим образом:

 @Html.Partial("count")

Но когдая добавляю его в представления индекса или детали бритвы, он генерирует ошибку как:

The model item passed into the dictionary is of type 'testtt.ViewModel.mainViewModel', but this dictionary requires a model item of type 'testtt.ViewModel.countVm'.

Теперь предположим, что этот метод подсчета имеет некоторые идентичные данные, которые должны быть переданы во все другие виды бритвы, но не отдельно, потому чтоУ прохождения будет много времени, и предположим, что завтра по любой причине, если логика будет обновлена, я должен перейти к каждому отдельному методу в отдельности и соответствующим образом обновить их, что невозможно, если мы предполагаем более 100 методов.

Короче говоря, я ищу способ извлечения данных из двух моделей представлений в одном виде бритвы?

1 Ответ

0 голосов
/ 16 декабря 2018

Используйте ViewBag или ViewData для передачи любой информации, когда вы привязаны к одной модели.

  • ViewBag является динамическим: @ViewBag.- просто заполните данные в контроллере, и вы увидите их.

  • ViewData - это словарь и используется ViewData ["any_name"]

Конечно, в представлении требуется соответствующее приведение.

Если вы хотите сохранить глобальную переменную, доступную для всех представлений, то это на уровне приложения:

 Application["Counter"] = 1234;

Также вы можете передать модельна частичный:

@Html.Partial("count", Model)
...