Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MVC中返回的类型不正确_C#_Asp.net Mvc - Fatal编程技术网

C# MVC中返回的类型不正确

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

我的viewmodel有问题。我有一个create方法,create方法是post。在我的viewmodel中,我发送了两个类ProjectModel和ActivityLogModel。我遇到的问题是下面的错误。它希望数据作为ProjectViewModel返回,但数据来自ProjectModel。如何更正此错误,以便以正确的类型返回数据

传递到字典中的模型项的类型为 “GlobalNaming.Models.ProjectModel”,但此词典需要 “GlobalNaming.Models.ProjectViewModel”类型的模型项

视图模型

    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
参数

您在HttpGet
Create
中呈现了
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
}