0

I次MVC3モデルがあります:MVC3のDropDownListコードまず

public class Dine 
{ 
    [Key] 
    [Display(Name = "Table Number")] 
    public string TableNumber { get; set; } 

    public List<SelectListItem> TableSelections { get; set; } 


    [Display(Name = "Table Date")] 
    [Required(ErrorMessage = "Please enter a date")] 
    public DateTime Date { get; set; } 

} 

を}

リスト項目の値がコントローラで定義され、ドロップダウンリストがに押されて提出ちょうどビューに表示されて罰金データベースに値を保存します。次のエラーが表示されます。

この問題の解決方法を知っている人はいますか?

これは、このチュートリアルで、私は下からの提案に従い、このエラーを取得しているhttp://codeoverload.wordpress.com/2011/05/22/dropdown-lists-in-mvc-3/

おかげ

EDIT 基づいています:タイプを変換できません「System.Collections.Generic.List」「システムへの。 Web.Mvc.SelectList」

これは私が私の見解で持っているものです。

<td>@Html.DropDownListFor(model => model.TableSelection, (SelectList)ViewBag.Tables)</td> 

は、これは私が持っているものです

public class Dine 
{ 
    [Key] 
    [Display(Name = "Table No")] 
    public int TableNo { get; set; } 

    public string TableOption { get; set; } 

    [Display(Name = "Table Date")] 
    [Required(ErrorMessage = "Please enter a date")] 
    public DateTime Date { get; set; } 
} 
} 

私のモデルではこれが私のコントローラです:

public class RestaurantController : Controller 
{ 
    TheDatabaseEntities db = new TheDatabaseEntities(); 
    // 
    // GET: /Dine/ 

    public ActionResult Index() 
    { 
     ViewBag.Tables = GetTableOptions(); 
     return View(); 
    } 

    [HttpPost] 
    public ActionResult Index(Restaurant model) 
    { 
     if (ModelState.IsValid) 
     { 

      return RedirectToAction("AddBookingComplete"); 
     } 
     ViewBag.Tables = GetTableOptions(); 

     return View(model); 
    } 
    public ActionResult BookingComplete() 
    { 
     return View(); 
    } 

    private List<Restaurant> GetTableOptions() 
    { 
     List<Restaurant> Tables = new List<Restaurant>(); 
     Table.Add(new Dine() { TableNumber = 1, TableSelection = "Table 1" }); 
     Table.Add(new Dine() { TableNumber = 2, TableOSelection = "Table" }); 
     Table.Add(new Dine() { TableNumber = 3, TableSelection = "Table" }); 
     Tables.Add(new Dine() { TableNumber = 4, TableSelection = "Table" }); 

     return Table; 
     } 
} 
} 

私はMVC3に非常に新しいですとすべてのヘルプがにappriciatedされてありがとう!

答えて

0

いいえ、MVC3モデルはありません。 MVC3モデルとして使用しようとしているEntity Frameworkモデルがあります。これは微妙な区別ではありません。

Entity Frameworkモデルに選択リストを追加すると、Entity Frameworkはそのリストをデータベースにシリアル化しようとしています。それをしないでください。データにエンティティモデルを使用し、MVCのビューモデルを使用します。

あなたが行っている作業はチュートリアルに基づいていると主張していますが、そのチュートリアルではEntity Frameworkモデルを使用していません。それはビューモデルです。

EFモデルをビューで使用することを強く推奨している場合は、そのモデルではなく、ViewData(またはViewBag)でSelectListを渡す必要があります。

+0

返信いただきありがとうございます、どうすればそれをビューモデルにすることができますか?申し訳ありませんが、私はMVCに非常に新しいです – user1302054

+0

@ user1302054 - あなたはしていません。それはポイント –

0

Mystere Manが正しいです。ドロップダウンリストから選択した値をデータベースに保存する必要があると思います。

ViewBag.Tables = yourList; 

そして、あなたのビューの使用aに:ミステリーが言ったように、あなたのcontrolerにViewBagを使用して、ビューにSelectListのオブジェクトを渡し、その後

public string TableOption { get; set; } 

:もしそうなら、このようなものでTableOptionプロパティを変更ドロップダウンヘルパーを選択してモデルにバインドします。

@Html.DropDownListFor(model => model.TableOption, new SelectList(ViewBag.Tables, "TableNo","TableOption")) 

最後に、モデルをポストアクションメソッドに保存します。

+0

あなたの助けの両方のおかげでおかげで、私はそれをこのようにしたと仮定しますhttp://codeoverload.wordpress.com/2011/05/22/dropdown-lists-in-mvc-3/ viewmodelを使用してどのように値をデータベースに保存しますか?私は通常このようにします:if(ModelState.IsValid){db.Order.Add(order); db.SaveChanges(); } – user1302054

+0

EFモデルをViewモデルとして使用できます。実際これはコードファーストアプローチの利点の1つです。ここで間違っているのは、SelectListItemのリストをエンティティ(レストランクラス)に入れることです。これは、EFでは、RestaurantテーブルとSelectListItemテーブルの間に1対多の関係があるかのように解釈されます(SelectListItemテーブルを持たない場合)。したがって、EFモデルをViewモデルとして使用する場合は、その答えで示唆していることを実行する必要があります。 – fcaldera

+0

これまでの助けてくれてありがとう、私はあなたの提案に従っているが、次のエラーが表示されます:タイプ 'System.Collections.Generic.List'を 'System.Web.Mvc.SelectList'に変換できません。私の現在の仕事の状況を示す。このエラーがなぜ起こっているのか知っていますか? – user1302054

関連する問題