2012-01-15 80 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; } 
    } 
相關問題