Asp.net mvc 2 Html.DropDownList自动映射问题
我收到这个错误: 具有键“DepartmentId”的ViewData项的类型为“System.Int32”,但必须为“IEnumerable”类型 使用以下设置。我不知道如何解决它。错误发生在模型视图代码中。此行:public void MapTo(Person domainModel)。我正在使用AutoMapper将ViewModel映射回DomainModel(反转DomainModel到ViewModel的初始映射) 域模型(使用LINQ to SQL,因此这是一个分部类): 这是我的模型视图:Asp.net mvc 2 Html.DropDownList自动映射问题,asp.net-mvc-2,automapper,Asp.net Mvc 2,Automapper,我收到这个错误: 具有键“DepartmentId”的ViewData项的类型为“System.Int32”,但必须为“IEnumerable”类型 使用以下设置。我不知道如何解决它。错误发生在模型视图代码中。此行:public void MapTo(Person domainModel)。我正在使用AutoMapper将ViewModel映射回DomainModel(反转DomainModel到ViewModel的初始映射) 域模型(使用LINQ to SQL,因此这是一个分部类): 这是我的
public class PersonViewModel
{
public object PersonId { get; set; }
public object DepartmentId { get; set; }
public object Name { get; set; }
public object Active { get; set; }
public object DateAdded { get; set; }
public object DateDeleted { get; set; }
public object DepartmentName { get; set; }
//helper method
public void MapTo(Person domainModel)
{
Mapper.Map(this, domainModel);
}
}
控制器类别代码:
[HttpPost]
public ActionResult Edit(PersonViewModel viewModel)
{
var domainModel = new Person();
try
{
viewModel.MapTo(domainModel);
UpdateModel(domainModel);
_personRepository.Save();
return RedirectToAction("Index", "Person");
}
catch
{
return View(viewModel);
}
}
和我的视图HTML代码:
<div class="editor-field">
<%: Html.DropDownList("DepartmentId", (IEnumerable<SelectListItem>)ViewData["DepartmentList"])%>
<%: Html.ValidationMessageFor(model => model.DepartmentId) %>
</div>
型号.部门ID)%>
您没有真正遵循开发mvc应用程序的最佳实践
关于错误:
Html.DropDownList在模型中查找类型为IEnumerable
的数据,但找到的却是int
(DepartmentId
)
您的ViewModel不应该使用MapTo方法,它违反了单一责任原则
在action方法中,您不会执行任何服务器端验证,如:
if(!ModelState.IsValid)
{
//rebuild the viewmodel and return the view
}
捕捉行动中的一切也是不必要的(而且很糟糕)
您可以在Global.asax应用程序\u Error
中执行此操作
HiddenInput、ScaffoldColumn、Validation和任何其他与UI相关的属性都应该在ViewModel上,而不是在域模型中对于使用视图模型以及验证和映射实体视图模型的良好示例,我建议您查看 我做了这个示例,它的主要目的是演示(映射技术)的使用
if(!ModelState.IsValid)
{
//rebuild the viewmodel and return the view
}