2012-01-15 108 views
0

我创建其中有两个实体,taskscategories一个简单的待办事项应用程序。如何为待办事项列表应用程序设计ViewModel?

要创建task,选择category是必须的。为此,我想我需要一个ViewModel。

这里是任务实体

public class Task 
{ 
    public int taskId { get; set; } 
    public int categoryId { get; set; } 
    public string taskName { get; set; } 
    public bool isCompleted { get; set; } 
    public DateTime creationDate { get; set; } 
    public DateTime completionDate { get; set; } 
    public string remarks { get; set; } 
    public string completionRemarks { get; set; } 
} 

这里是分类实体

public class Category 
{ 
    public int categoryId { get; set; } 
    public string categoryName { get; set; } 
} 

我如何设计一个TaskCategoryViewModel,这样我可以绑定在CreateTask鉴于category

编辑:我使用的是经典的ADO.NET而不是实体框架或LINQ to SQL。

回答

1

在TaskViewModel(我宁愿将其命名为CreateTaskViewModel)为类别选择列表

public IEnumerable<SelectListItem> CategoriesSelectList; 

在控制器创建属性,该属性返回视图之前绑定(注意,这也应该在后期处理来完成,当ModelState中无效)

public ViewResult Create() 
{ 
    CreateTaskViewModel model = new CreateTaskViewModel(); 
    model.CategoriesSelectList = _repository.AllCategories().Select(x=> new SelectListItem(){ Text = x.CategoryName, Value = x.CategoryId.ToString();} 
} 

最后,在视图

Html.DropDownListFor(model => model.CategoryId, Model.CategoriesSelectList) 

编辑:

在你的代码,_repository.AllCategories()应该由你的数据访问代码来代替,即有型IEnumerable<Category>返回对象。实际上,使用哪种数据访问技术并不重要。而且不要忘了给using System.Linq;语句添加到您的控制器文件,如果缺少。

+0

阿尔奇尔,当我输入' _repository.GetAllCategories()',我不能用'Select'没有它抛出一个错误。我使用普通的ADO.NET而不是EF或Linq到SQL。这可能是原因吗?如果可能,你能否相应修改你的答案? – Animesh 2012-01-16 14:47:27

+0

@KishorNanda _repository.GetAllCategories()仅仅是示例代码。一般情况下,应该有与IEnumerable类型对象。实际上你使用EF的ADO.NET并不重要 – archil 2012-01-16 15:10:36

1

基肖尔,

最好的办法是有模式,为您的任务和第一类(全部在一个)

部门首长在这里的定义是如何一切挂在一起。

其中

IEnumerable<SelectListItem> Categories 

用于创建下拉列表,它已准备好使用

<%= Html.DropDownListFor(model=>model.NewTask.categoryId, Model.Categories) %> 

这将创建你漂亮的下拉列表

private IEnumerable<Category> GetCategories 
    { 
     get 
     { 
      List<Category> categories = new List<Category> 
              { 
               new Category() {categoryId = 1, categoryName = "test1"}, 
               new Category() {categoryId = 2, categoryName = "category2"} 
              }; 
      return categories; 
     } 
    } 

    [AcceptVerbs(HttpVerbs.Get)] 
    public ActionResult CreateTask() 
    { 
     TaskModel taskModel = new TaskModel(); 
     LoadCategoriesForModel(taskModel); 
     return View(taskModel); 
    } 

    private void LoadCategoriesForModel(TaskModel taskModel) 
    { 
     taskModel.Categories = 
      GetCategories.Select(
       x => 
       new SelectListItem() 
        {Text = x.categoryName, Value = x.categoryId.ToString(CultureInfo.InvariantCulture)}); 
    } 

    public ActionResult CreateTask(TaskModel taskModel) 
    { 
     if (ModelState.IsValid) 
     { 
      // do your logic for saving 
      return RedirectToAction("Index"); 
     } 
     else 
     { 
      LoadCategoriesForModel(taskModel); 
      return View(taskModel); 
     } 
    } 

    /// <summary> 
    /// your model for creation 
    /// </summary> 
    public class TaskModel 
    { 
     public Task NewTask { get; set; } 
     public IEnumerable<SelectListItem> Categories { get; set; } 
    } 

    /// <summary> 
    /// Task 
    /// </summary> 
    public class Task 
    { 
     public int taskId { get; set; } 
     public int categoryId { get; set; } 
     public string taskName { get; set; } 
     public bool isCompleted { get; set; } 
     public DateTime creationDate { get; set; } 
     public DateTime completionDate { get; set; } 
     public string remarks { get; set; } 
     public string completionRemarks { get; set; } 
    } 

    /// <summary> 
    /// Category 
    /// </summary> 
    public class Category 
    { 
     public int categoryId { get; set; } 
     public string categoryName { get; set; } 
    } 
相关问题