C# 传递到字典中的模型项的类型为“System.Tuple”?
在我看来,这里我实现了使用两个模型的元组。但是我得到了以下错误: 传递到字典中的模型项的类型为 System.Tuple'2[WebApplication.Models.log_-voyage,System.Collections.Generic.List'1[WebApplication.Models.log_-ligne_-voyage]»,但此词典需要类型为«System.Tuple'2[System.Collections.Generic.List'1[WebApplication.Models.log_-voyage],System.Collections.Generic.List'1[WebApplication.Models.log_-ligne_-voyage]»的模型项 以下是我的看法:C# 传递到字典中的模型项的类型为“System.Tuple”?,c#,asp.net,asp.net-mvc,asp.net-mvc-5,tuples,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 5,Tuples,在我看来,这里我实现了使用两个模型的元组。但是我得到了以下错误: 传递到字典中的模型项的类型为 System.Tuple'2[WebApplication.Models.log_-voyage,System.Collections.Generic.List'1[WebApplication.Models.log_-ligne_-voyage]»,但此词典需要类型为«System.Tuple'2[System.Collections.Generic.List'1[WebApplication.Mo
@using WebApplication.Models;
@model Tuple<List<log_voyage>, List<log_ligne_voyage>>
@{
ViewBag.Title = "Index";
Layout = "~/Views/Shared/_Layout1.cshtml";
}
控制器:
public ActionResult Index( int id = 0 )
{
var first = entities.log_voyage.Where(v => v.Num_Voy == lastVoyageID).FirstOrDefault();
log_voyage voyage1 = entities.log_voyage.Find(lastVoyageID);
var second = entities.log_ligne_voyage.Where(x => x.NUM_Voy == lastVoyageID).ToList();
var t = new Tuple<log_voyage, List<log_ligne_voyage>>(first, second);
return View(t);
}
[HttpPost]
public ActionResult Index(Tuple<log_voyage, List<log_ligne_voyage>> voy)
{
try
{
if (voy.Item1.Dat_Voy == null)
{
ModelState.AddModelError("Dat_Voy", "Incorrect Date.");
}
//.............Some Code .........//
entities.Entry(voy.Item1).State = EntityState.Modified;
entities.SaveChanges();
return RedirectToAction("Index", "Miss_Voyage");
}
else
{
GetListcontoller();
return View(voy);
}
}
catch (DataException /* dex */)
{
ModelState.AddModelError("", "Impossible d'executer cette action. contacter le service info SVP.");
GetListcontoller();
return View("Index", "Home");
}
}
有什么建议吗
var first = entities.log_voyage.Where(v => v.Num_Voy == lastVoyageID).FirstOrDefault();
将返回的单个实例
WebApplication.Models.log_voyage
你的观点需要
Tuple<List<log_voyage>, List<log_ligne_voyage>>
要获取元组中第一个项所需的列表,您需要从使用FirstOrDefault检索的项构造一个列表,或者需要更改视图的模型。尝试使用视图模型而不是元组 您的代码将如下所示:
public class VoyageViewModel
{
public log_voyage log { get; set; }
public List<log_ligne_voyage> log_ligne_voyage_list { get; set; }
}
public ActionResult Index(VoyageViewModel voyageViewModel)
{
...
}
正如Mike McCaughan指出的那样 您从控制器返回的模型是
Tuple<log_voyage, List<log_ligne_voyage>> voy
但这一观点是有希望的
@model Tuple<List<log_voyage>, List<log_ligne_voyage>>
正如您所说,如果将视图更改为,则会出现错误
Tuple<log_voyage, List<log_ligne_voyage>>
尝试将控制器更改为
Tuple<List<log_voyage>, List<log_ligne_voyage>>
如以下代码所示:
[HttpPost]
public ActionResult Index(Tuple<List<log_voyage>, List<log_ligne_voyage>> voy)
{
try
{
if (voy.Item1.Count() == 0)
{
// followed by your code
从您的视图中比较Tuple和您在Index方法中所期望的:Tuple您看到这两段代码之间的差异了吗?啊,是的,我更改了它,但我有一个错误Erreur du serveur dans l'application'/'。编译错误CS1579:foreach语句无法对“WebApplication.Models.log\u voyage”类型的变量进行操作,因为“WebApplication.Models.log\u voyage”不包含“GetEnumerator”的公共定义。如果将其更改为仅元组,则无法迭代元组的第一部分,因为它不再是一个列表。所以我需要做什么!!是的,我在元组之前做过,但我遇到了这样的问题,我在log_seave name Heure_Voy中有一个属性,我想通过使用VoyageViewModel来实现这一点,如果VoyageViewModel.Heure_Voy==null做点什么,但我不能调用Heure_Voy,这就是问题,我不知道如何使用Voy.Item1.Dat_Voy==null{ModelState.AddModelErrorDat_-Voy,日期不正确。}不再有效Voy.Item1.FirstOrDefault.Date_-Voy==null,希望有效?同样,我更改为Voy.Item1.Count==0,这意味着该列表中没有元素,这间接意味着Dat_-Voy可以为null。