我的模特是:
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问题,但无法解决这个问题。
答案 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"))