dc9*_*922 6 model-view-controller asp.net-mvc entity-framework
我首先使用实体框架代码创建了一个MVC项目.我的模型只是一个收集信息的表单.
public class Application
{
public int Id { get; set; }
public string FirstName { get; set; }
public string MiddleInitial { get; set; }
public string LastName { get; set; }
public int SSN { get; set; }
public DateTime DOB { get; set; }
public string Street { get; set; }
public string City { get; set; }
public string State {get; set; }
public string Zip { get; set; }
public int HomePhone { get; set; }
public int BusinessPhone { get; set; }
public int MobilePhone { get; set; }
Run Code Online (Sandbox Code Playgroud)
}
我的目标是创建一个包含所有状态的下拉列表,但我发现这非常困难,因为我已经通过带有视图和控制器的脚手架创建了数据库.是否有一种简单的方法可以将其与现有数据库联系起来?我几乎整整都没有运气搜索过.对模型/控制器/视图包含的内容的概述/解释将是惊人的!
更新:我创建了一个名为"State"的新模型,其属性为"Id"和"StateName",并在数据库中创建了一些状态.在我的"应用程序"控制器里面的Create action方法我有:
调节器
public ActionResult Create()
{
ApplicationDbContext db = new ApplicationDbContext();
this.ViewData["Id"] = new SelectList(db.States.ToList(), "Id", "StateName");
return View();
}
Run Code Online (Sandbox Code Playgroud)
视图
@Html.DropDownList("Id")
Run Code Online (Sandbox Code Playgroud)
现在的问题是我收到这个错误"没有类型为'IEnumerable'的ViewData项具有密钥'Id'." 非常感谢帮助!
它很简单.IEnumerable<SelectListItem>向模型添加属性(这里我建议您创建一个ViewModel,它可以具有Application与以下代码作为属性包含的完全相同的属性).然后,您只需构建列表并将其发送到您的视图
public IEnumerable<SelectListItem> States{ get; set; }
Run Code Online (Sandbox Code Playgroud)
我假设你想State从db中检索值.以下是您将如何做到这一点:
private IEnumerable<SelectListItem> GetAllStates()
{
var list = new Application();
IEnumerable<SelectListItem> slItem = from s in db.Applications
select new SelectListItem
{
Selected = s.Id.ToString() == "Active",
Text = s.State,
Value = s.State.ToString()
};
return slItem;
}
Run Code Online (Sandbox Code Playgroud)
然后在你的行动中做这样的事情:
var app = new Application
{
States = GetAllStates()
};
return View(app);
Run Code Online (Sandbox Code Playgroud)
最后,在视图上使用Razor来显示这样的Dropdown列表
@Html.DropDownListFor(m => m.State, Model.States, "--Select a State--")
Run Code Online (Sandbox Code Playgroud)
第一个参数是要更新的模型的属性,第二个是数据列表,第三个是要显示的默认消息
希望这可以帮助.
创建一个数据层来检索您想要的列表。然后使用EF获取所有状态。
//assuming you have a table of states..
var states = db.States();
Run Code Online (Sandbox Code Playgroud)
状态表应该是唯一的状态列表。
var selectList = new List<SelectListItem>();
foreach (var thing in states)
{
//if you got everything, thus the ID field for the value...
selectList.Add(new SelectListItem
{
Text = thing.State,
Selected = false,
Value = thing.ID
});
}
Run Code Online (Sandbox Code Playgroud)
确保在您的视图模型类中,选择列表是公共属性......并设置为您上面所做的操作。您还需要为视图选择回发提供一个字符串。
StatesSelectList = selectList;
public IEnumerable<SelectListItem> StatesSelectList { get; set; }
public string SelectedState { get; set; }
Run Code Online (Sandbox Code Playgroud)
在你看来,这样做:
@Html.DropDownListFor(p => Model.SelectedState, Model.StatesSelectList)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
21033 次 |
| 最近记录: |