所以我基本上和这篇帖子有同样的问题:ASP.NET MVC - How to populate dropdownlist with another model?
只要模型已填充,解决方案就可以......技术上工作。但是,我正在使用CREATE视图,控制器的操作只返回一个空白" View()"很明显,因为它创造了一些东西,所以你还没有任何数据....但我显然仍然希望下拉列表能够从一个从数据库中获取数据的模型中填充。如果我尝试在具有空模型的视图上运行此代码,我会得到"对象引用未设置为对象"当它试图抓住返回列表的属性时。
我尝试使用USING语句在Create操作中实例化一个新的空白模型,并仅使用Type模型的新实例设置PropertyTypeList属性,并将其传递给视图,它有点工作......视图显示随着填充的其他Type模型的下拉列表,但它预先填充了一堆具有0&s和1/1 / 1900的int / date类型,因为我有非可空字段。这是我迄今为止最接近的方法,只是让用户创建一个新记录,其中包含来自模型的字段的预填充下拉列表。
我可以在Create Action中创建一个新的Type模型并将其分配给我过去做过的Viewbag或Tempdata,但这个想法让我觉得很脏。如果此人刷新页面以便他们收到错误并且完全不专业,则Viewbag会消失。而且我没有太多使用Tempdata,因为它依赖于会话状态,如果用户在多个标签中打开我的表单很容易就会出现问题。
我觉得这篇文章的解决方案非常接近。当您正在使用EDIT操作时,它可以正常工作,因为您正在传递完整模型。但有没有人知道如何使用空模型获得下拉列表这样填充?我尝试过在我的辅助Type模型中添加一个额外的类
namespace blablanamespace {
public partial class PropertyType {
.. bla bla bla propertytype ID and name here
}
public class ViewModel
{
private readonly List<PropertyType> _keytypes;
public IEnumerable<SelectListItem> PropTypeItems
{
get { return new SelectList(_keytypes, "TypeID", "TypeID"); }
}
}
}
和
@Html.DropDownListFor(model => model.TypeID, new SelectList(new blablanamespace.Models.ViewModel().PropTypeItems))
然后我才得到这个错误:
值不能为空。参数名称:items
如果我更改ViewModel类以实例化类似的新类型列表
public class ViewModel
{
public class ViewModel
{
private readonly List<PropertyType> _keytypes = new List<PropertyType>;
public IEnumerable<SelectListItem> PropTypeItems
{
get { return new SelectList(_keytypes, "TypeID", "TypeID"); }
}
}
这次我没有收到错误,但我只是得到一张空白表格(yay),其中有一个空白的下拉列表(嘘!!)。我认为后一种方法可行,因为当我想在控制器中填充一个新的清单时我基本上做同样的事情
List<ApplicationKeyType> _keytypes = new List<ApplicationKeyType>();
这种行为在模型中看起来并不相同。