Как объединить два действия в один контроллер - PullRequest
0 голосов
/ 07 апреля 2020

Я хочу создать приложение для отчета, и я застрял с тех пор, как получил эти ошибки, и я понятия не имею, что делать. Поэтому я попытаюсь объяснить, что я хочу: в одном представлении есть два dropdown lists, то есть два разных Models. Таким образом, один dropdown использует Model 1, а другой dropdown использует Model 2. Я создал два разных действия для обоих этих выпадающих списков

public interface IDemIzvjestaji
    {                
        public List<DvojkaVM> VratiTipove();

        public List<DvojkaVM> VratiDefinicije();
    }

И реализовал эти методы внутри моих Service

using IZ.BLL.Interfejsi;
using IZ.Model.DBModels;
using IZ.Model.VM;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization.Json;
using System.Text;
using System.Xml;
using System.Xml.Linq;
using Formatting = Newtonsoft.Json.Formatting;

namespace IZ.BLL.Servisi
{
    public class DemIzvjestajiServis : IDemIzvjestaji
    {
        private AppDBContext _context;
        public DemIzvjestajiServis(AppDBContext context)
        {
            _context = context;
        }

        public bool DemirMetodaDemo()
        {
            return true;
        }

        public List<DvojkaVM> VratiDefinicije()
        {
            var def = _context.IzvjestajDefinicija.ToList();
            if (def.Count == 0)
                return null;
            var defVM = new List<DvojkaVM>();
            foreach(var item in def)
            {
                var izvDef = new DvojkaVM();
                izvDef.text1 = item.IzvjestajDefinicijaId.ToString();
                izvDef.text2 = item.KratkiNaziv;
                defVM.Add(izvDef);
            }
            return defVM;
        }

        public List<DvojkaVM> VratiTipove()
        {
            var lista = _context.IzvjestajTip.ToList();
            if (lista.Count == 0)
                return null;
            var listaVM = new List<DvojkaVM>();
            foreach(var i in lista)
            {
                var tipVM = new DvojkaVM();
                tipVM.text1 = i.IzvjestajTipId.ToString();
                tipVM.text2 = i.Naziv;
                listaVM.Add(tipVM);
            }
            return listaVM;
        }
    }
}

And In my Controller I created Action and use ViewBag to send data to View


     public IActionResult TipIzvjestaja()
            {
                ViewBag.SelektTip = _demIzvjestajiServis.VratiTipove();
                return View("Index");
            }

            public IActionResult IzvjestajDefinicija()
            {
                ViewBag.SelektDef = _demIzvjestajiServis.VratiDefinicije();
                return View("Index");


}

И на экране я отображаю два раскрывающихся списка.

<div>
    <p>Odaberi Tip izvještaja:</p>
    <select asp-items="@(new SelectList(ViewBag.SelektTip,"text1","text2"))" class="row form-control col-4">
        <option value="0">Odaberite</option>
    </select>
</div>

<div>
    <p>Odaberi Definiciju Izvjestaja:</p>
    <select asp-items="@(new SelectList(ViewBag.SelektDef ,"text1","text2"))" class="row form-control col-4">
        <option value="0">Odaberite</option>
    </select>
</div>

После этого я получаю сообщение об ошибке

ArgumentNullException: Value cannot be null. (Parameter 'items')
<select asp-items="@(new SelectList(ViewBag.SelektDef ,"text1","text2"))" class="row form-control col-4">

Я исправил эту ошибку, когда разделил эти два действия, создал другой просмотр и поместил список DropDown, но я хочу, чтобы они были в одном просмотре есть два dropdown списков. Если кто-то может мне помочь, я буду очень благодарен.

1 Ответ

1 голос
/ 07 апреля 2020

Вам нужно только два действия, если вы собираетесь делать ДВА вызова по HTTP, в вашем случае вам НЕ нужно два действия.

Вы можете заставить его работать так:

        public IActionResult TipIzvjestaja()
        {
            ViewBag.SelektTip = _demIzvjestajiServis.VratiTipove();
            ViewBag.SelektDef = _demIzvjestajiServis.VratiDefinicije();
            return View("Index");
        }

Таким образом, вы можете предоставить свое представление обоими списками, которые оно ожидает.

...