2017-04-17 60 views
0

我在这里实现Tuple在我看来使用两个模型。但我得到以下错误:传入字典的模型项目类型为'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]]»的典范项目。

这是我的观点:

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

任何建议,请?

+1

比较'组<列表,名单>'从您的视图和你期待的指数方法是什么:'组>'你看到这两段代码之间的区别了吗? –

+0

ahhh是我改变它,但我有这个错误 Erreur du serveur dans l'application'/'。 Erreur de compilation CS1579:foreach语句无法对'WebApplication.Models.log_voyage'类型的变量进行操作,因为'WebApplication.Models。log_voyage”不包含一个公共定义‘的GetEnumerator’ – Sofia

+0

权,如果你改变它只是'组>',你将无法遍历元组的第一部分,因为它不再是'List '。 –

回答

1

麦克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 
+0

这一点,如果(voy.Item1.Dat_Voy == NULL){ ModelState.AddModelError( “Dat_Voy”, “不正确的日期。”); } 不再有效 – Sofia

+0

voy.Item1.FirstOrDefault()。Date_Voy == null,希望这能起作用吗? – Shan

+0

相同,我改为voy.Item1.Count()== 0,这意味着该列表中没有任何元素,这意味着Dat_Voy可能为空。 – Shan

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

要获取的元组的第一个项目所需的列表中,您将需要建立一个列表从您使用“FirstOrDefault”检索的项目,或者您需要更改视图的模型。

0

尝试使用视图模型而不是Tuple。然后

您的代码将是这个样子:

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

是的,我做过这些,但我有这样的问题 我有一个属性log_voyage名Heure_Voy我想通过使用VoyageViewModel 如果(voyageViewModel.Heure_Voy == null)做一些事情,但我不能打电话给Heure_Voy这就是问题我不知道再怎么 – Sofia

相关问题