我在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 等。