0

我正在尝试从 webforms 转移到 MVC,老实说,进展并不顺利。

我需要DropDownList从我的数据库中填充值,我很难理解如何做到这一点。我在想,我需要创建一个模型,使用实体框架,并参考我DropDownList的?但是我如何将它指向那个模型呢?另外,如果我从数据库表中创建模型,我该如何调整选择命令,所以我只能得到某些值,而不是整个表?

我知道这是一个广泛的问题,我没有列出任何示例,但我很难找到关于我的问题的信息,我可以理解。

4

3 回答 3

1

这个怎么样

你的视图模型

   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)
于 2012-04-30T08:18:47.523 回答
1

我将从这个开始,如果您还没有这样做,这应该可以让您创建项目,这样您就可以准备好模型

http://msdn.microsoft.com/en-us/data/gg685489

为了创建一个下拉列表这里是一个例子

ViewBag.dropdownlist = new SelectList(db.tablename, "Valuefiled", "NameGField");

其中 Valuefiled=数据库中要用于值的列的名称

"NameGField"=数据库中要用于名称的列的名称

获取下拉列表以查看

@Html.DropDownList("dropdownlist")
于 2012-04-30T07:40:03.270 回答
0

您可以使用视图模型。这是一个带有一些假设的示例解决方案。请参阅下拉列表(在下拉列表中,我列出了“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>
}
于 2012-04-30T08:19:11.523 回答