1

この質問は非常に単純なはずです.ビューのドロップダウンリストの値をコントローラーに渡そうとしています.エラーは発生していませんが、そのプロパティに対してnull値を送信しています. 助けてください..

私のコードは次のとおりです。

コントローラ:

    public ActionResult Create()
    {
        var list = new [] 

            { 
                new Room{ RoomID = 1, Building = "FAYARD HALL"},
                new Room{ RoomID = 2, Building = "WHATEVER HALL"},
                new Room{ RoomID = 3, Building = "TIME SQUARE"},
                new Room{ RoomID = 4, Building = "MISSISSIPPI"},
                new Room{ RoomID = 5, Building = "NEW YORK"},

            };


        var selectList = new SelectList(list,"RoomID", "Building");
        ViewData["BuildingList"] = selectList;  

        return View();
    }

    //
    // POST: /Room/Create

    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Create(Room room)
    {
        if (ModelState.IsValid)
        {
            db.Rooms.Add(room);
            db.SaveChanges();
            return RedirectToAction("Index");
        }

        return View(room);
    }

私の見解:

    <div>
        @Html.LabelFor(model => model.Building, "Building")
    </div>
    <div>

        @Html.DropDownList("BuildingList", String.Empty)
        @Html.ValidationMessageFor(model => model.Building)
    </div>

助けてください...

ありがとうございました。

4

2 に答える 2

4

ドロップダウンは入力されていますか? あなたのコードを考えると、そうするには次のものが必要だと思います:

@Html.DropDownListFor(model => model.Building, ViewData["BuildingList"])

すなわち。Building選択した値を のプロパティにバインドしRoom、ビュー モデルのドロップダウン リストを使用してリストに入力します。

また、これがあなたの意図であるかどうかもわかりません。ドロップダウン リストに部屋を入力し、その選択内容に基づいて新しい部屋を作成するというのは、少し怪しいように思えます。

編集

わかりました、私はあなたのために物事をずっと簡単にするつもりです.

私はあなたのクラスから始めます。あなたが働いていると私が想定している部屋は次のとおりです。

public class Room
{
    public int RoomId { get; set; }
    public string Building { get; set; }
}

ここで、ViewData を使用するよりも少し良いことをしましょう。ビューモデルを作成しました。これに選択リストを入力すると、ビューで選択したアイテムがSelectedRoomIdフォームの投稿時にバインドされます。

public class ViewModel
{
    public int SelectedRoomId { get; set; }
    public SelectList RoomOptions { get; set; }
}

コントローラ

private SelectList GetSelectList()
{
    var list = new[] 
    { 
        new Room { RoomId = 1, Building = "FAYARD HALL"},
        new Room { RoomId = 2, Building = "WHATEVER HALL"},
        new Room { RoomId = 3, Building = "TIME SQUARE"},
        new Room { RoomId = 4, Building = "MISSISSIPPI"},
        new Room { RoomId = 5, Building = "NEW YORK"}
    };

    return new SelectList(list, "RoomId", "Building");
}

public ActionResult Create()
{
    ViewModel viewModel = new ViewModel
    {
        RoomOptions = GetSelectList()
    };
    return View(viewModel);
}

[HttpPost]
public ActionResult Create(ViewModel viewModel)
{
    if (ModelState.IsValid)
    {
        // Save here
        // create a new room using the SelectedOptionId in the viewModel
        return RedirectToAction("Index", "Home");
    }
    // repopulate the list if something failed
    viewModel.RoomOptions = GetSelectList();
    return View(viewModel);
}

意見

@model PathToYourViewModel.ViewModel

@using (Html.BeginForm())
{
    @Html.DropDownListFor(model => model.SelectedRoomId, Model.RoomOptions, "-- select an option --")
    <button type="submit">Submit</button>
};

試してテストしました。幸運を!

于 2013-09-08T00:43:09.783 に答える