0

次の MVC3 モデルがあります。

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/

ありがとう

編集 以下の提案に従って、このエラーが発生しました: タイプ 'System.Collections.Generic.List' を 'System.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に非常に慣れていないので、どんな助けも感謝しますありがとう!

4

2 に答える 2

0

ミステアマンは正しいです。ドロップダウン リストから選択した値をデータベースに保存する必要があると思います。その場合は、TableOption プロパティを次のように変更します。

public string TableOption { get; set; }

次に、ミステリーが言ったように、コントローラーで ViewBag を使用して SelectList オブジェクトをビューに渡します。

ViewBag.Tables = yourList;

そして、ビューでドロップダウンヘルパーを使用して選択を埋め、モデルにバインドします:

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

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

于 2012-04-22T22:52:58.613 に答える
0

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

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

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

ビューで EF モデルを使用することを主張する場合 (それをしないというベスト プラクティスにもかかわらず)、モデルではなく、ViewData (または ViewBag) を介して SelectList を渡す必要があります。

于 2012-04-22T18:31:32.207 に答える