如何将两个动作合并到一个控制器中
How to merge two actions into one Controller
我想为报告创建一个应用程序,但由于出现这些错误而陷入困境,我不知道该怎么做。
所以我将尝试解释我想要的:一个视图有两个 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
列表。
如果有人能帮助我,我将不胜感激
如果您要通过 HTTP 进行两次调用,您只需要执行两次操作,在您的情况下,您不需要执行两次操作。
你可以让它像这样工作:
public IActionResult TipIzvjestaja()
{
ViewBag.SelektTip = _demIzvjestajiServis.VratiTipove();
ViewBag.SelektDef = _demIzvjestajiServis.VratiDefinicije();
return View("Index");
}
这样您就可以为您的视图提供它期望的两个列表。
我想为报告创建一个应用程序,但由于出现这些错误而陷入困境,我不知道该怎么做。
所以我将尝试解释我想要的:一个视图有两个 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
列表。
如果有人能帮助我,我将不胜感激
如果您要通过 HTTP 进行两次调用,您只需要执行两次操作,在您的情况下,您不需要执行两次操作。
你可以让它像这样工作:
public IActionResult TipIzvjestaja()
{
ViewBag.SelektTip = _demIzvjestajiServis.VratiTipove();
ViewBag.SelektDef = _demIzvjestajiServis.VratiDefinicije();
return View("Index");
}
这样您就可以为您的视图提供它期望的两个列表。