2016-12-24 10 views
0

私は非常にasp.netに新しく、このコードに固執しています。このエラーを解決できません "辞書に渡されたモデルアイテムは'AMSPractice.Models.AddTable'型のモデル項目が必要です。この辞書には、 'System.Collections.Generic.IEnumerable`1 [AMSPractice.Models.AddTable]'タイプのモデル項目が必要です。辞書に渡されたモデル項目は 'AMSPractice.Models.AddTable'タイプのものです

たとえば、私のテーブルに値が1つしか表示されないようにするには、「first」という値の名前が複数あるため、「first」を1回だけ表示したい場合は、最初に書きます FirstOrDefaultどこにエラーが表示されません しかし、私は戻って1つだけの値を返したい場合は、1つ以上の値を返します。ここで

は私のコード コントローラ

public ActionResult Login(string Name,string TeacherID) 
     { 
      AdmissionDBEntities obj = new AdmissionDBEntities(); 
      AddTable t = new AddTable(); 
      var v = obj.AddTables.FirstOrDefault(a => a.Teacher.Equals(Name) && a.Teacher_Id.Equals(TeacherID)); 
      if (v != null) 
      { 
       **var var = obj.AddTables.FirstOrDefault(b => b.Teacher==Name);** 
       return View(var); 
      } 
      return RedirectToAction("/Home/Index"); 

で、私のビューは次のとおりです。

@model IEnumerable<AMSPractice.Models.AddTable> 
<h3>Classes Assigned</h3> 
     <br /><br /> 
     <ul> 
@foreach (var a in Model) 
{ 
    <li> 
     @Html.ActionLink(a.Class,"Sections","Attendance", new { nid = a.Foreign_Id }, null) 
    </li> 
} 
      </ul> 

答えて

1

あなたの問題は、あなたのビューを強く型付けされている方法です。あなたのコントローラから、return View(var);を返すと、単一のオブジェクトをビューに渡しますが、ビューは強く型付けされ、AddTableオブジェクトのIEnumerableが必要です。

コントローラからIEnumerableを返すか、1つのオブジェクトだけを表示するようにビューを変更する必要があります。

単一のオブジェクトだけが表示されるようにビューを変更するには、次の操作を実行してください。あなたのビューで

あなたはその時点で@model AMSPractice.Models.AddTable

に持っているものから、あなたの強く型付けされた@modelを変更するには、foreachのを必要としないだろうし、あなただけの、次のを持っているでしょう。

<li> 
    @Html.ActionLink(a.Class,"Sections","Attendance", new { nid = Model.Foreign_Id}, null) 
</li> 
+0

私は一意の値(「最初」が複数回表示されてから1回だけ表示されることを意味します)を表示することを忘れていました。だから私はforeachが必要です。私の問題は解決されていません:\。 – ttoseeff

関連する問題