1

という名前のテーブルがあるとしましょう... Person だと思いますが、列には Name、Email、AgeGroupId があります。

AgeGroupId は、テーブル AgeGroup に関連する int です。Agegroup には、Id と AgeGroupName の 2 つの列しかありません。

さて、「人」を編集するページである私のビューでは、すべての AgeGroupName をテキストとして、ID を値として持つドロップダウン ボックスが必要です。このようにして、後で新しい「年齢グループ」を年齢グループ テーブルに追加すると、すべてのドロップダウン ボックスが更新されます。または、これを行うべきより良い方法はありますか?

私は現在、自分のモデルを渡し、これを行っています:

@Html.DropDownListFor(model => model.AgeGroupId, @agegroups)

ビューの上部で、ハードコードされた値で SelectList を作成しています。それらをハードコーディングしたくないと思いませんか?AgeGroups テーブルからリストを取得するには、@agegroup の代わりに何をすればよいですか?

ありがとう。

4

2 に答える 2

1

適切な方法は、ViewModelsを使用することです。基本的に、ビューのビューモデルを作成する必要があり、dbの結果をビューに直接渡さないでください。何かのようなもの:

public class PersonViewModel
{
    public Person Person {get ; set;}
    public Dictionary<int, string> AgeGroups { get; set; }
    public PersonViewModel() {}
    public PersonViewModel(int personId)
    {
        var ctx = new Context();
        this.Person = ctx.Persons.SingleOrDefault(p => p.Id == personId);
        foreach(var ageGroup in ctx.AgeGroups)
        {
            this.AgeGroups.Add(ageGroup.Id, ageGroup.AgeGroupName);
        }
    } 

次に、コントローラーメソッドは次のようになります。

public ActionResult Add(PersonViewModel vm)
{
    var ctx = new Context();
    if(ModelState.IsValid)
    {
        ctx.Persons.Add(vm.Person);
        return View("Index"); 
    }

    return View(vm);
}  

そして、あなたの見解では、単純に:

@Html.DropDownListFor(model => model.Person.AgeGroupId,
new SelectList(model.AgeGroups, "Id", "AgeGroupName"))  

もちろん、ビューのモデルはになりPersonViewModelました。
更新
は、ASP.NET MVC 3ツールの更新により、デフォルトでリレーションのドロップダウンが追加されるようです。詳細はこちら

于 2012-05-19T23:04:56.980 に答える
0

正しい方法は、msdn ブログ ( http://blogs.msdn.com/b/joecar/archive/2011/04/15/asp-net-mvc-3-tools-update) の Kamyars の編集によるようです。 aspx

于 2012-05-30T20:42:20.810 に答える