我正在学习使用Scaffolding的ASP.NET MVC 5 EF,我正在尝试提出一个简单的静态下拉选项列表。
我有一个客户,想要一个下拉选择状态列表。现在,我希望列表是硬编码的。
到目前为止,我已经弄清楚如果我创建一个具有“StateID”属性的State模型类,并将相同的StateID添加到我的Client类,脚手架将其识别为外键。但是,下拉列表中没有选择。
public string stateID { get; set; }
我认为我的问题是如何在脚手架的某处填充状态对象列表。我可以找到的所有在线示例都是向控制器或视图添加代码。那里的问题是,当我从模型中重新生成脚手架时,我的视图和控制器代码将重新生成。这就是我想要的,我只需要知道如何填充模型中的静态数据,或类似的?
我尝试根据一些研究创建这个类,但我认为它不正确,或者我需要以某种方式在我的Clinet模型中调用GetStates()?
public class State
{
public string StateID { get; set; }
public string Name { get; set; }
public static IQueryable<State> GetStates()
{
return new List<State>
{
new State {
StateID = "MA",
Name = "Massachusetts"
},
new State{
StateID = "CT",
Name = "Conneticuit"
},
new State{
StateID = "RI",
Name = "Rhode Island"
},
new State{
StateID = "NH",
Name = "New Hampshire"
}
}.AsQueryable();
}
}
这是自动生成的脚手架视图(我认为我不应该修改,以便我能够重新构建脚手架):
@model IEnumerable<MBDApp.Models.Client>
@{
ViewBag.Title = "Index";
}
<h2>Index</h2>
<p>
@Html.ActionLink("Create New", "Create")
</p>
<table class="table">
<tr>
<th>
@Html.DisplayNameFor(model => model.firstName)
</th>
<th>
@Html.DisplayNameFor(model => model.lastName)
</th>
<th>
@Html.DisplayNameFor(model => model.StateID)
</th>
<th></th>
</tr>
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.firstName)
</td>
<td>
@Html.DisplayFor(modelItem => item.lastName)
</td>
<td>
@Html.DisplayFor(modelItem => item.StateID)
</td>
<td>
@Html.ActionLink("Edit", "Edit", new { id=item.id }) |
@Html.ActionLink("Details", "Details", new { id=item.id }) |
@Html.ActionLink("Delete", "Delete", new { id=item.id })
</td>
</tr>
}
</table>