1

私のモデルは次のとおりです。

public string Vehicle

    public DropDownListModel()
    {
        List<SelectListItem> items = new List<SelectListItem>();
        items.Add(new SelectListItem() { Text = "one", Value = "one" });
        items.Add(new SelectListItem() { Text = "two", Value = "two" });
        SelectList items2 = new SelectList(items);
        VehicleList = items2;
    }

    public string Vehicle
    {
        get;
        set;
    }

    public SelectList VehicleList
    {
        get;
        set;
    }

}

selectList を dropdwonlist にレンダリングしたいのですが、取得しているのは

ここに画像の説明を入力

私の見解は次のとおりです。

    @using ( Html.BeginForm("Post","Guestbook"))
    {
     @Html.Label("Name") @Html.DropDownListFor(m=> m.Vehicle,Model.VehicleList)<br />

    <input type="submit" name="submit" value="submit" />
    }

私は何を間違っていますか。私はこれにかなりの時間を費やし、さまざまな SO の質問を確認しましたが、これを解決できませんでした。

4

3 に答える 3

0

何をしているのかをより明確にするためにコードを編集したいかもしれません...しかし、それはかなり明らかです:コードは意図したとおりに正確に機能しますが、実際には間違って使用しています。

SelectList は、既存の SelectListItems のリストを使用して作成されることを意図していません。生成される対応する HTML 要素の値と名前を意味するこれらのアイテムのプロパティを指定して、独自のアイテムのコレクションをフィードする必要があります。作成している実際の SelectListItems が表示されるため、コードは (一種の) 機能します。それらを List または他の IEnumerable に貼り付けるだけでも機能します。ただし、2 つのアプローチを組み合わせないでください。

モデルクラスが与えられた場合の実際の例を次に示します。

public class Vehicle
{
    public int Id { get; set; }
    public string Name { get; set; }
}
public class Model
{
    public int SelectedId { get; set; }
    public IEnumerable<Vehicle> Items { get; set; }
}

次の Razor コードが機能します。

@Html.DropDownListFor(m => m.SelectedId, new SelectList(Model.Items, "Id", "Name"))
于 2013-08-16T16:25:00.300 に答える