传递到字典中的模型项的类型是' System.Tuple'?

时间:2017-04-17 17:42:55

标签: c# asp.net asp.net-mvc asp.net-mvc-5 tuples

这里实现了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]]»类型的模型项。

这是我的观点:

@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");
    }
}

有什么建议吗?

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

var first =  entities.log_voyage.Where(v => v.Num_Voy == lastVoyageID).FirstOrDefault();

将返回

的单个实例
 WebApplication.Models.log_voyage

您的观点需要

 Tuple<List<log_voyage>, List<log_ligne_voyage>>

要获取元组中第一项所需的列表,您需要使用&#34; FirstOrDefault&#34;来检索您检索的项目中的列表。或者您需要更改视图的模型。

答案 2 :(得分:0)

尝试使用视图模型而不是元组。

您的代码看起来像这样:

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)
{
    ...
}