Asp.net mvc 3 下拉列表以供发布
我有一个返回列表项的方法。当我尝试用这些项目填充DropDownList时,出现了问题。我每次都会得到一个空异常。陷阱在哪里 方法:Asp.net mvc 3 下拉列表以供发布,asp.net-mvc-3,Asp.net Mvc 3,我有一个返回列表项的方法。当我尝试用这些项目填充DropDownList时,出现了问题。我每次都会得到一个空异常。陷阱在哪里 方法: public IEnumerable<SelectListItem> GetItems() { List<SelectListItem> list = new List<SelectListItem>(); list.Add(new SelectListItem { Text = "Pt
public IEnumerable<SelectListItem> GetItems()
{
List<SelectListItem> list = new List<SelectListItem>();
list.Add(new SelectListItem { Text = "Ptuj", Value = "1" });
list.Add(new SelectListItem { Text = "Celje", Value = "2" });
list.Add(new SelectListItem { Text = "Laško", Value = "3" });
list.Add(new SelectListItem { Text = "Maribor", Value = "4" });
list.Add(new SelectListItem { Text = "Ljubljana", Value = "5" });
list.Add(new SelectListItem { Text = "N/A", Value = "6" });
foreach (SelectListItem item in list)
{
yield return item;
}
}
我会将该列表更改为SelectList。您已经在使用SelectListItems了,所以您不妨全力以赴使用SelectList 然后,返回SelectList。您可以将签名返回类型保留为IEnumerable,因为SelectList类实现了该接口(无论如何,它的父类实现了该接口) 让我举例说明。以下是一个模型:
public class AModel
{
public IEnumerable<SelectListItem> places { get; set; }
public int SelectedValue { get; set; }
}
下面是新的GetItems方法:
public IEnumerable<SelectListItem> GetItems()
{
List<SelectListItem> list = new List<SelectListItem>();
list.Add(new SelectListItem { Text = "Ptuj", Value = "1" });
list.Add(new SelectListItem { Text = "Celje", Value = "2" });
list.Add(new SelectListItem { Text = "Laško", Value = "3" });
list.Add(new SelectListItem { Text = "Maribor", Value = "4" });
list.Add(new SelectListItem { Text = "Ljubljana", Value = "5" });
list.Add(new SelectListItem { Text = "N/A", Value = "6" });
SelectList thelist = new SelectList(list, "Value", "Text");
return thelist;
}
public IEnumerable GetItems()
{
列表=新列表();
添加(新建SelectListItem{Text=“Ptuj”,Value=“1”});
添加(新的SelectListItem{Text=“Celje”,Value=“2”});
添加(新的SelectListItem{Text=“Laško”,Value=“3”});
添加(新的SelectListItem{Text=“Maribor”,Value=“4”});
添加(新建SelectListItem{Text=“Ljubljana”,Value=“5”});
添加(新建SelectListItem{Text=“N/A”,Value=“6”});
SelectList thelist=新的SelectList(列表,“值”、“文本”);
返回列表;
}
看看你怎么做
编辑(添加视图):
@model AModel
@{
ViewBag.Title = "Index";
}
<h2>Example</h2>
Here are the places: @Html.DropDownListFor(m => m.SelectedValue, (SelectList)Model.Places, "Select a place")
@model AModel
@{
ViewBag.Title=“Index”;
}
例子
以下是位置:@Html.DropDownListFor(m=>m.SelectedValue,(SelectList)Model.places,“选择一个位置”)
看起来您正在调用视图中viewmodel/model的GetItems
方法。去拿东西。哦,不!不要那样做
为下拉列表向viewmodel添加集合属性。Viewmodel只是一个POCO。没有办法
public class SignUpVM
{
public string Name{ set;get;}
public List<SelectListItem> Cities{ set;get;}
public int PlaceOfBirth {set;get;}
}
假设GetCities
方法返回城市的SelectListItem
列表
public List<SelectListItem> GetCities()
{
List<SelectListItem> cityList=new List<SelectListItem>();
cityList.Add(new SelectListItem { Text = "Ptuj", Value = "1" });
cityList.Add(new SelectListItem { Text = "Celje", Value = "2" });
return cityList;
}
提交表单时,您将在PlaceOfBirth
属性中获得所选项目的id
[HttpPost]
public ActionResult Create(SignUpVM model)
{
int placeOfBirthId=model.PlaceOfBirth;
// TO DO : Save and redirect.
}
我仍然在同一行中得到null异常。这可能是因为运行应用程序时首先显示“索引”页面吗?因为我认为,在我点击提交之前,列表是空的。如果我在项目属性中将第一页更改为“信息”,则会出现404错误。您是否在get action方法或帖子中看到错误?下拉菜单是否正在呈现某些项目?@cvenko我的表单标记中有拼写错误。我已更正。尝试更新后的答案。我在“Index”视图的第行中发现错误:
@Html.DropDownListFor(model=>model.PlaceOfBirth,new SelectList(model.Cities,“Value”,“Text”),“select”)
@cvenko,我们将在Create
操作中返回城市的视图模型。不索引
视图中的代码是什么样子的?要显示DropDownlist。@cvenko,我编辑了答案以包含razor视图,该视图应称为Index.cshtml,并放置在解决方案中视图文件夹内名为Home的文件夹中。我还将SelectedValue更改为0,以显示默认文本。
public ActionResult Create()
{
var vm=new SignUpVM();
vm.Cities=GetCities();
return View(vm);
}
public List<SelectListItem> GetCities()
{
List<SelectListItem> cityList=new List<SelectListItem>();
cityList.Add(new SelectListItem { Text = "Ptuj", Value = "1" });
cityList.Add(new SelectListItem { Text = "Celje", Value = "2" });
return cityList;
}
@model SignUpVM
@using(Html.BeginForm())
{
@Html.DropDownListFor(x=>x.PlaceOfBirth,
new SelectList(Model.Cities,"Value","Text"),"select")
<input type="submit" />
}
[HttpPost]
public ActionResult Create(SignUpVM model)
{
int placeOfBirthId=model.PlaceOfBirth;
// TO DO : Save and redirect.
}