2012-06-17 46 views
1

我有下拉列表的問題MVC 我在我的應用程序使用模型視圖,這是我的代碼如何使用MVC DROPDOWNLIST

namespace MedicallexiconProject.ViewModel 
{ 
    public class WordViewModel 
    { 
     private readonly ICategoryService _categoryService; 
     public WordViewModel(ICategoryService categoryService) 
     { 
      _categoryService = categoryService; 
      var selectList = _categoryService.GetAllCategorysSelectList(). 
       Select(x => new SelectListItem 
       { 
        Text = x.Name, 
        Value = x.ID.ToString() 
       }).ToList(); 
      Categories = selectList; 
     } 

     public WordViewModel() 
     { 

     } 
     public string Name { get; set; } 
     private IList<SelectListItem> _categories; 
     public IList<SelectListItem> Categories 
     { 
      get 
      { 
       if (_categories == null) 
       { 
        _categories = new List<SelectListItem>(); 
       } 
       return (_categories); 
      } 

      set { _categories = value; } 
     } 
    } 
} 

,這是我的控制器

[HttpGet] 
public ActionResult Create() 
{ 
    var wordViewModel = new WordViewModel(_categoryService); 
    ViewBag.CategoryID = wordViewModel.Categories; 
    return View(); 
} 

[HttpPost] 
public ActionResult Create(WordViewModel wordViewModel) 
{ 
    Mapper.CreateMap<WordViewModel, Word>(); 

    var word = new Word(); 
    Mapper.Map(wordViewModel, word); 

    if (ModelState.IsValid) 
    { 
     _wordService.AddNewWord(word); 
     _uow.SaveChanges(); 
     return RedirectToAction("Index"); 
    } 
    return View(wordViewModel); 
} 

現在哪有我在我的視圖中插入下拉列表?

+0

請幫助me.tanks – Mohammad

+1

你不應該把邏輯放在你的ViewModel中,填充你的ViewModel的邏輯應該放在你的控制器動作中。 ViewModel應該是一個沒有業務邏輯或數據訪問邏輯的笨類。 –

回答

3

由於AlfalfaStrange提到,你不應該在你的ViewModel添加邏輯。這使它變得醜陋!保持您的ViewModel簡單的POCO。

在你的視圖模型稱爲「SelectedCategoryID」添加多一個屬性這樣

public class WordViewModel 
{ 
    public int SelectedCategoryID { set;get;} 
    public IList<SelectListItem> Categories { set;get;} 
    public string Name { set;get;} 
} 

初始化您的ViewModel的項目(類別)在GET方法。在這裏,我調用一個名爲GetCategories的方法,該方法返回一個categories.I可以簡單地調用我想要的方法。

public ActionResult Create() 
{ 
    var model=new WordViewModel(); 
    model.Categories=YourService.GetCategories(); 
    return View(model); 
} 

在強類型創建視圖,使用此

@model WordViewModel 
using(@Html.BeginForm()) 
{ 

    @Html.DropDownFor(x=>x.SelectedCategoryID, 
       new SelectList(Model.Categories,"Value","Text"),"Select Category") 
    <input type="submit" value="Save" /> 
} 

在你HttpPost操作方法,你可以檢查wordViewModel.SelectedCategoryID選定值。

​​3210
+0

Hello.can我retun從視圖類別對象映射? – Mohammad

+0

@MohammadJafari映射的意思是? – Shyju

+0

var category = _categoryService.GetByID(wordViewModel.SelectedCategoryID); \t \t \t word.Category = category; – Mohammad

0

包括在視圖模型中加載下拉列表的代碼是絕對沒問題的。選擇列表和下拉列表都是「視圖」項目....它們與商業邏輯無關,您的控制器和模型無需瞭解有關SelectLists或SelectListItems或DropDownList等的任何內容。

+0

請詳細說明原因:0。這篇文章是一歲,你必須有東西添加,所以請添加你所知道的:) – secretformula