DropDownListFor MVC:如何使其工作

时间:2013-08-16 16:03:34

标签: c# asp.net-mvc html.dropdownlistfor

我的模特是:

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中,但我得到的是

enter image description here

我的观点是:

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

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

我做错了什么。我花了很多时间在这上面并检查了各种SO问题,但无法解决这个问题。

3 个答案:

答案 0 :(得分:2)

您的VehicleList在哪里被初始化? 看起来DropDownListModel似乎没有被调用,即使它是 - 它设置的items2是什么?

尝试在那里设置this.VehicleList

答案 1 :(得分:2)

同意Max没有初始化VehicleList。即使您将其设置为列表,它仍然不知道该值是什么属性以及数据是什么。尝试改变你的模型:

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

    public string Vehicle { get; set; }

    public SelectList VehicleList { get; set; }
}

答案 2 :(得分:0)

您可能希望编辑代码,以便更清楚地了解您正在做什么......但这很明显:代码完全符合预期,但您实际上使用错误。

不打算使用现有SelectListItem列表创建SelectList。您应该为它提供自己项目的集合,指定这些项目上的哪些属性用于将生成的相应HTML元素的值和名称。代码工作(排序),因为您将看到您正在创建的实际SelectListItems。你可以简单地将它们粘贴在List或其他IEnumerable中,它也可以工作。但是不要将这两种方法结合起来。

这是一个工作示例,给出了模型类:

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"))