1

次のフィールドのみを持つデータベーステーブル内に格納された列挙のエントリがあります:IDName. このテーブル内に格納されている値をフォームの DropDownList 内に表示したいと考えています。次に、ユーザーは値を選択してフォームを送信します。

列挙から DropDownList を簡単に作成する方法を見つけました(ただし、テーブル内のすべてのレコードの Name フィールドを DropDownList に入力するのがおそらく最善でしょう)。ただし、後でフォーム送信の DropDownList を整数値にバインドして、他のフォーム値と共にデータベース (FK - PK) に格納する方法が見つかりませんでした。

そのようなバインディングを行う方法を示すサンプル コードを提供できますか?

更新:素晴らしい答えをありがとう。もう 1 つ質問があります。DropDownList コンテンツを AJAX 経由で取得し、それを ViewModel の DropDownList と SelectList に (ID パラメーターと Name パラメーターの両方を使用して) 入れることは可能ですか? ユーザーの入力に基づいてコンテンツを選択的に取得したいので、取得したデータを ViewModel に入力します。

4

1 に答える 1

2

いつものように、モデルを定義することから始めます。

public class MyViewModel
{
    public int SelectedValue { get; set; }
    public IEnumerable<SelectListItem> Items { get; set; }
}

次に、コントローラー:

public class HomeController : Controller
{
    public ActionResult Index()
    {
        var model = new MyViewModel
        {
            // TODO: Fetch from the database some enumerable collection 
            // containing Id and Name
            Items = new SelectList(new[]
            {
                new { Id = 1, Name = "item 1" },
                new { Id = 2, Name = "item 2" },
            }, "Id", "Name")
        };
        return View(model);
    }

    [HttpPost]
    public ActionResult Index(MyViewModel model)
    {
        // TODO: Do something with model.SelectedValue
        return RedirectToAction("index");
    }
}

最後に、強く型付けされたビュー:

<% using (Html.BeginForm()) { %>
    <%: Html.DropDownListFor(x => x.SelectedValue, Model.Items) %>
    <input type="submit" value="OK" />
<% } %>
于 2010-07-04T07:38:33.353 に答える