C# 传递到字典中的模型项的类型为“System.Tuple”?

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

在我看来,这里我实现了使用两个模型的元组。但是我得到了以下错误:

传递到字典中的模型项的类型为 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]»的模型项

以下是我的看法:

@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。