2017-04-17 4 views
0

私のビューでは2つのモデルを使用するために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

は、ビューと何がIndexメソッドに期待しているから、' 'タプル<リスト、リスト>比較しますlog_ligne_voyage >> '2つのコードの違いは分かりますか? –

+0

ahhhはい私はそれを変更するが、私はこのエラーがあった Erreur du serveur dans l'application '/'。 Erreur de compilation CS1579: 'WebApplication.Models.log_voyage'という変数は、WebApplication.Modelsのためにforeach文を操作できません。log_voyage 'には' GetEnumerator 'のパブリック定義が含まれていません – Sofia

+0

それを 'Tuple >'に変更すると、タプルの最初の部分を反復することはできません。もはや 'List 'ではありません。 –

答えて

1

あなたのコードは次のようになります。

あなたはコントローラから戻ってきているモデルが

Tuple<log_voyage, List<log_ligne_voyage>> voy 

である。しかし、あなたは

Tuple<log_voyage, List<log_ligne_voyage>> 

にビューを変更した場合、エラーを得ることは変えてみて言ったようにビューが

@model Tuple<List<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"、 "Incorrect Date。"); } はもう機能しません – Sofia

+0

voy.Item1.FirstOrDefault()。Date_Voy == null、これがうまくいきますか? – Shan

+0

同じことをvoy.Item1.Count()== 0に変更しました。これは、そのリストにDat_Voyがnullである可能性があることを間接的に意味する要素が存在しないことを意味します。 – Shan

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

はタプルの最初の項目に必要なリストを取得するには

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

を必要

WebApplication.Models.log_voyage 

あなたのビューの単一のインスタンスを返します、あなたはリストを構築する必要があります。 "FirstOrDefault"を使用して取得するアイテムから削除するか、ビューのモデルを変更する必要があります。

0

タプルではなくビューモデルを使用してみてください。マイクMcCaughanが指摘したように

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

関連する問題