控制器代码:
[HeaderFooterFilter]
public ActionResult AddNew()
{
//CreateEmployeeViewModel employeeListViewModel = new CreateEmployeeViewModel();
//employeeListViewModel.FooterData = new FooterViewModel();
//employeeListViewModel.FooterData.CompanyName = "StepByStepSchools";//Can be set to dynamic value
//employeeListViewModel.FooterData.Year = DateTime.Now.Year.ToString();
//employeeListViewModel.UserName = User.Identity.Name; //New Line
return View("CreateEmployee", new CreateEmployeeViewModel());
}
视图CreateEmployee代码:
@using MVC_Sec.Models
@model Employee
[HeaderFooterFilter] 过滤器(里面的bvm(BaseViewModel )需要被传送到CreateEmployee里面的layout中用来初始化CreateEmployeeViewModel的对象,所以view的参数是CreateEmployeeViewModel) 代码:
public class HeaderFooterFilter : ActionFilterAttribute
{
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
ViewResult v = filterContext.Result as ViewResult;
if (v != null) // v will null when v is not a ViewResult
{
BaseViewModel bvm = v.Model as BaseViewModel;
if (bvm != null)//bvm will be null when we want a view without Header and footer
{
bvm.UserName = HttpContext.Current.User.Identity.Name;
bvm.FooterData = new FooterViewModel();
bvm.FooterData.CompanyName = "StepByStepSchools";//Can be set to dynamic value
bvm.FooterData.Year = DateTime.Now.Year.ToString();
}
}
}
}
然后因为视图CreateEmployee代码:
@using MVC_Sec.Models
@model Employee
所以会报如下错误:
传入字典的模型项的类型为“MVC_Sec.Models.CreateEmployeeViewModel”,但此字典需要类型“MVC_Sec.Models.Employee”的模型项。
如果把CreateEmployee里面的@using MVC_Sec.Models@model Employee改为CreateEmployeeViewModel需要的 @using MVC_Sec.ViewModels
@model EmployeeViewModel 则传值到 CreateEmployee视图不会错。
但是这样一来CreateEmployee视图里面需要用到的@using MVC_Sec.Models@model Employee
就没有了 导致,Employee数据不能赋值传递。
求大神帮忙