C# MVC中返回的类型不正确
我的viewmodel有问题。我有一个create方法,create方法是post。在我的viewmodel中,我发送了两个类ProjectModel和ActivityLogModel。我遇到的问题是下面的错误。它希望数据作为ProjectViewModel返回,但数据来自ProjectModel。如何更正此错误,以便以正确的类型返回数据 传递到字典中的模型项的类型为 “GlobalNaming.Models.ProjectModel”,但此词典需要 “GlobalNaming.Models.ProjectViewModel”类型的模型项 视图模型C# MVC中返回的类型不正确,c#,asp.net-mvc,C#,Asp.net Mvc,我的viewmodel有问题。我有一个create方法,create方法是post。在我的viewmodel中,我发送了两个类ProjectModel和ActivityLogModel。我遇到的问题是下面的错误。它希望数据作为ProjectViewModel返回,但数据来自ProjectModel。如何更正此错误,以便以正确的类型返回数据 传递到字典中的模型项的类型为 “GlobalNaming.Models.ProjectModel”,但此词典需要 “GlobalNaming.Models.P
public List<ProjectModel> Project { get; set; }
public List<ActivityLogModel> Activity { get; set; }
在第一个方法中,您返回一个
ProjectViewModel
,在第二个方法中,您返回一个ProjectModel
。因此,要么合并它们并尝试使用相同的视图,要么创建不同的视图
在你看来,你有
@Model ProjectModel
这意味着此视图将只接受类型为ProjectModel
我看到您的ProjectViewModel具有ProjectModel的属性,因此您还可以将返回更改为:
return View(new ProjectViewModel { Project = pm })
您在post操作中返回了错误的类型。见下文:
return View(new ProjectViewModel { Project = pm });
实际上,问题是HttpPost
Create
方法的输入参数projectmodelpm
参数
您在HttpGetCreate
中呈现了ProjectViewModel
,因此这是发回的内容,而不是ProjectModel。所以,只需将GET请求中呈现的类型和Post处理程序中输入参数中期望的类型对齐即可
这将有助于:
[HttpPost]
public ActionResult Create(ProjecViewtModel pvm, HttpPostedFileBase files)
{
// TODO:
从错误消息中可以很清楚地看到,您正在从action方法发送某种类型,而表单需要的是另一种类型 为什么要将ViewModel中的域模型用作属性?这将使ViewModels与域模型紧密耦合 您应该像这样更新viewmodel
public class ProjectVM
{
public string ProjectName { set;get;}
public string ProjectOwner { set;get;}
//and other relevant properties ONLY here
}
使用它从视图传输和接收数据
public ActionResult Create()
{
var vm=new ProjectVM();
return View(vm);
}
现在,请确保您的视图是强类型的Viewmodel。不是域模型
@model ProjectVM
@using(Html.Beginform())
{
@Html.TextBoxFor(x=>x.ProjectName)
<input type="submit" />
}
{
…创建(ProjectModel ProjectModel,
}-不要将变量命名为与类定义相同的名称。何时发生错误?返回视图(pm);
@model ProjectVM
@using(Html.Beginform())
{
@Html.TextBoxFor(x=>x.ProjectName)
<input type="submit" />
}
[HttpPost]
public ActionResult Create(ProjectVM viewModel)
{
if(ModelState.IsValid)
{
//Create domain model object and set the property values and save
Project proj=new Project();
proj.Name=viewModel.ProjectName
proj.ProjectOwner=viewModel.ProjectOwner;
db.Projects.Add(proj);
db.SaveChanges();
return RedirectToAction("Created");
}
return View(viewModel); //returning your view model object
}