我正在尝试从 webforms 转移到 MVC,老实说,进展并不顺利。
我需要DropDownList
从我的数据库中填充值,我很难理解如何做到这一点。我在想,我需要创建一个模型,使用实体框架,并参考我DropDownList
的?但是我如何将它指向那个模型呢?另外,如果我从数据库表中创建模型,我该如何调整选择命令,所以我只能得到某些值,而不是整个表?
我知道这是一个广泛的问题,我没有列出任何示例,但我很难找到关于我的问题的信息,我可以理解。
我正在尝试从 webforms 转移到 MVC,老实说,进展并不顺利。
我需要DropDownList
从我的数据库中填充值,我很难理解如何做到这一点。我在想,我需要创建一个模型,使用实体框架,并参考我DropDownList
的?但是我如何将它指向那个模型呢?另外,如果我从数据库表中创建模型,我该如何调整选择命令,所以我只能得到某些值,而不是整个表?
我知道这是一个广泛的问题,我没有列出任何示例,但我很难找到关于我的问题的信息,我可以理解。
这个怎么样
你的视图模型
public class CategoryViewModel
{
public Category Category { get; set; }
public IEnumerable<SelectListItem> CategoryTitles { get; set; }
}
你的控制器
public ActionResult Create()
{
var categoryviewmodel = new CategoryViewModel();
categoryviewmodel.Category = new Category();
var list = categoryRepository.AllCategoryTitles().ToList().Select(t => new SelectListItem
{
Text = t.CategoryName,
Value = t.CategoryID.ToString()
})
.ToList();
list.Insert(0, new SelectListItem { Value = "0", Text = "Please Selext" });
categoryviewmodel.CategoryTitles = list;
return View(categoryviewmodel);
}
您的存储库
public IQueryable<Category> AllCategoryTitles()
{
var query = context.Categories.Where(m => m.ParentCategoryID == null && m.IsActive==true);
return query;
}
你的看法
@Html.DropDownListFor(model => model.CategoryParentID, Model.CategoryTitles)
我将从这个开始,如果您还没有这样做,这应该可以让您创建项目,这样您就可以准备好模型
http://msdn.microsoft.com/en-us/data/gg685489
为了创建一个下拉列表这里是一个例子
ViewBag.dropdownlist = new SelectList(db.tablename, "Valuefiled", "NameGField");
其中 Valuefiled=数据库中要用于值的列的名称
"NameGField"=数据库中要用于名称的列的名称
获取下拉列表以查看
@Html.DropDownList("dropdownlist")
您可以使用视图模型。这是一个带有一些假设的示例解决方案。请参阅下拉列表(在下拉列表中,我列出了“InBound”类型的部门
员工模型
public class EmployeeModel
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public int DeptId { get; set; }
}
部门模型
public class DepartmentModel
{
public int Id { get; set; }
public string Name { get; set; }
public string Type { get; set; }
}
ViewModel(要传递到视图中)
public class EmployeeViewModel
{
public EmployeeModel Employee { get; set; }
public IEnumerable<DepartmentModel> Departments { get; set; }
}
控制器
public ActionResult Index()
{
EmployeeViewModel vm = new EmployeeViewModel();
//This is hardcoded. However you will write your own method to pull the department details with filtering
List<DepartmentModel> departments = new List<DepartmentModel>() { new DepartmentModel { Id = 1, Name = "Accounts", Type = "InBound" }, new DepartmentModel { Id = 2, Name = "Finance", Type = "OutBound" }, new DepartmentModel { Id = 3, Name = "HR", Type = "InBound" } };
vm.Departments = departments.Where(d => d.Type == "InBound");
return View(vm);
}
看法
@model Test1.ViewModels.EmployeeViewModel
@{
ViewBag.Title = "Index";
}
<h2>Index</h2>
@using (Html.BeginForm())
{
@Html.HiddenFor(model => model.Employee.Id);
<table>
<tr>
<td>@Html.LabelFor(model => model.Employee.FirstName)</td>
<td>@Html.EditorFor(model => model.Employee.FirstName)</td>
</tr>
<tr>
<td>@Html.LabelFor(model => model.Employee.LastName)</td>
<td>@Html.EditorFor(model => model.Employee.LastName)</td>
</tr>
<tr>
<td>@Html.Label("Department")</td>
<td>@Html.DropDownListFor(model => model.Employee.DeptId, new SelectList(Model.Departments, "Id", "Name"))</td>
</tr>
</table>
}