如何使用MVC DropDownList



我在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);
}

现在如何在视图中插入下拉列表?

正如AlfalfaStrange所提到的,你不应该在ViewModel中添加逻辑。这让它变得丑陋!保持您的视图模型简单 POCO。

在视图模型中再添加一个名为"SelectedCategoryID"的属性,如下所示

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

GET方法中初始化ViewModel的项目(类别)。在这里,我调用一个名为 GetCategory 的方法,该方法返回类别列表。我可以简单地在任何地方调用该方法。

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

[HttpPost]
public ActionResult Create(WordViewModel wordViewModel)
{
   if(ModelState.IsValid)
   {
     //Checck for wordViewModel.SelectedCategoryID here now
   }
   //some validation failed. Let's reload the category data again.
   wordViewModel.Categories=YourService.GetCategories();
   return View(wordViewModel);
}

视图模型中包含加载下拉列表的代码是绝对可以的。 选择列表和下拉列表都是"查看"项。它们与业务逻辑无关,您的控制器和模型不需要了解 SelectLists、SelectListItems 或 DropDownList 等。

相关内容

  • 没有找到相关文章

最新更新