我已经搜索了好几个小时了,但找不到我正在寻找答案的答案。我有以下内容:
(Repository.cs)
public class AppRespository
{
private DataContext db = new DataContext();
public IEnumerable<SelectListItem> LoadStates()
{
var query = from d in db.States.ToList()
select new SelectListItem
{
Value = d.StateID.ToString(),
Text = d.State.ToString()
};
return query;
}
}
DataContext.cs
public class DataContext : DbContext
{
public DbSet<States> States { get; set; }
}
ViewModel(States.cs)
public class States
{
[Key]
public int StateID { get; set; }
public IEnumerable<SelectListItem> State { get; set; }
}
Controller(ApplicantController.cs)
// GET: /Applicant/
public ActionResult Index()
{
AppRespository repo = new AppRespository();
States viewModel = new States();
viewModel.State = repo.LoadStates();
return View(viewModel);
}
查看:
@Html.DropDownListFor(model=>model.StateID, Model.State, "select")
为什么在调试我的应用程序时,我在我的存储库类的这一行得到一个null?
Text = d.State.ToString(),
State始终为null,而StateID始终设置为null。在使用我的模型和控制器之前,我已成功加载此下拉列表,但我喜欢这种模式。我是ASP MVC的中间人,所以我可能会遗漏一些东西。
感谢任何帮助。
答案 0 :(得分:0)
试试这个
@Html.DropDownListFor(n => n.StateID,
new SelectList(State, "Value", "Text"))
答案 1 :(得分:0)
尝试更改您的查询。而不是:
public IEnumerable<SelectListItem> LoadStates()
{
var query = from d in db.States.ToList()
select new SelectListItem
{
Value = d.StateID.ToString(),
Text = d.State.ToString()
};
return query;
}
有这个:
public IEnumerable<SelectListItem> LoadStates()
{
var query = from d in db.States
select new
{
StateID = d.StateID,
State = d.State
};
var result = from q in query.ToList()
select new SelectedListItem
{
Value = d.StateID.ToString(),
Text = d.State.ToString()
}
return result;
}
查询的第一部分设置一个查询,以便从数据库中存储数据。它使用具有2个属性的匿名类:StateID
和State
。
一旦查询准备就绪,我们调用query.ToList()
,它实际运行查询并获取数据,然后列出我们的匿名类对象。
现在我们可以从列表中进行选择,并使用SelectedListItem
或任何其他.NET方法将匿名对象中的数据转换为.ToString()
。
答案 2 :(得分:0)
看起来你需要在这里稍微移动一下。我对你想要达到的目标做了一些假设,但是
(Repository.cs)
public class AppRespository
{
private DataContext db = new DataContext();
public IEnumerable<SelectListItem> LoadStates()
{
var query = from d in db.States.ToList()
select new SelectListItem
{
Value = d.StateID.ToString(),
Text = d.State
};
return query;
}
}
的DbContext
public class DataContext : DbContext
{
public DbSet<StateEntity> States { get; set; }
}
州实体
public class StateEntity
{
[Key]
public int StateID { get; set; }
public string State { get; set; }
}
视图模型
public class StateModel
{
public IEnumerable<SelectListItem> States {get; set;}
}
控制器操作
// GET:/申请人/
public ActionResult Index()
{
AppRespository repo = new AppRespository();
StateModel viewModel = new StateModel();
viewModel.States = repo.LoadStates();
return View(viewModel);
}
希望这有助于您完成大部分工作。我假设您只想使用StateEntity
加载一个int / string对列表