传入ViewDataDictionary的模型项的类型为



我已经构建了一个viewModel,以便对'create'页面进行特定的验证。但是当我提交表单时,我得到以下错误:

"InvalidOperationException:传入ViewDataDictionary的模型项的类型是‘AURA.Models’。但是这个ViewDataDictionary实例需要一个类型为‘AURA.ViewModels.JobAddressVM’的模型项。">

模型"PostFou"都是相关的,但我并没有引用它。它只在提交时发生。

控制器:

public IActionResult JobAddress()
{
//viewmodel?
return View();
}
[HttpPost]
public async Task<IActionResult> JobAddress([Bind("FouName,FouPhon,FouEmai,FouAddr,FouPost,FouOrg")] PostZero postZero, PostOne postOne, PostFou postFou)
{
if (ModelState.IsValid)
{
//add post zero first
postZero.ZeroDate = DateTime.Now;
string uDate = DateTime.Now.ToString("yyMMdd");
string uDigit = _context.PostZeros.Count(d => d.ZeroDate.Date == postZero.ZeroDate.Date).ToString(); //awesome
postZero.Zero = uDate + "-" + uDigit;
postZero.ZeroAgen = User.Identity.Name;

_context.Add(postZero);
await _context.SaveChangesAsync();

//now the postone
postOne.OneStag = "MSR";
postOne.OneZero = postZero.Zero;
postOne.OneAgen = User.Identity.Name;
postOne.OnePart = postFou.FouPhon;
postOne.OneTitl = "T--" + postFou.FouName + "--" + DateTime.Now.ToShortDateString();
postOne.OneType = "MSR";
_context.Add(postOne);
await _context.SaveChangesAsync();
//now for posteig load
PostEig postEig = new PostEig();
postEig.EigZero = postZero.Zero;
postEig.EigAgen = "CLIENT";
postEig.EigRole = "SALE";
postEig.EigLoad = 0;
_context.Add(postEig);
await _context.SaveChangesAsync();
//POSTFOU
postFou.FouZero = postZero.Zero;
_context.Add(postFou);
await _context.SaveChangesAsync();

return RedirectToAction(nameof(PriceShip), new { zero = postOne.OneZero });
}
return View(postFou);

}

和观点:

@model AURA.ViewModels.JobAddressVM
@{ ViewData["Title"] = "Job Address"; }
<h4>Job and Address</h4>
<hr />
<div class="row">
<div class="col-md-4">
<form asp-action="JobAddress">
<div asp-validation-summary="ModelOnly" class="text-danger"></div>           
<div class="form-group">
<label asp-for="FouName" class="control-label"></label>
<input asp-for="FouName" class="form-control" />
<span asp-validation-for="FouName" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="FouPhon" class="control-label"></label>
<input asp-for="FouPhon" class="form-control" />
<span asp-validation-for="FouPhon" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="FouEmai" class="control-label"></label>
<input asp-for="FouEmai" class="form-control" />
<span asp-validation-for="FouEmai" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="FouAddr" class="control-label"></label>
<input asp-for="FouAddr" class="form-control" />
<span asp-validation-for="FouAddr" class="text-danger"></span>
</div>
<div class="form-group">
<label class="control-label">Apt No</label>
<input asp-for="FouOrg" class="form-control" />
<span asp-validation-for="FouOrg" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="FouPost" class="control-label"></label>
<input asp-for="FouPost" class="form-control" />
<span asp-validation-for="FouPost" class="text-danger"></span>
</div>


<div class="form-group">
<input type="submit" value="To Manifest" class="btn btn-primary" />
</div>
</form>
</div>
</div>

@section Scripts {
@{await Html.RenderPartialAsync("_ValidationScriptsPartial");}
}

和ViewModel:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace AURA.ViewModels
{
public class JobAddressVM
{

//fou
//[Key]
[Display(Name = "Full Name")]
[RegularExpression(@"[a-zA-Z0-9""'s-|.=+*/\]*$")]
[StringLength(45)]
public string FouName { get; set; }
[Display(Name = "Phone")]
[StringLength(10, ErrorMessage = "10 Digits only!")]
//[DataType(DataType.PhoneNumber)]
[RegularExpression(@"^[0-9s]{1,40}$",
ErrorMessage = "Characters are not allowed.")]
public string FouPhon { get; set; }
[Display(Name = "Email")]
[DataType(DataType.EmailAddress)]
[StringLength(45)]
public string FouEmai { get; set; }
[Display(Name = "Street Address")]
[RegularExpression(@"[a-zA-Z0-9""'s-|.=+*/\]*$")]
[StringLength(60)]
public string FouAddr { get; set; }
[Display(Name = "Apt/Unit")]
[RegularExpression(@"[a-zA-Z0-9""'s-|.=+*/\]*$")]
[StringLength(45)]
public string FouOrg { get; set; }
[Display(Name = "Postal Code")]
[RegularExpression(@"[a-zA-Z0-9""'s-|.=+*/\]*$")]
[StringLength(10)]
public string FouPost { get; set; }
}
}

您的post-action JobAddress返回的是postfoo类型的对象:

[HttpPost]
public async Task<IActionResult> JobAddress([Bind("FouName,FouPhon,FouEmai,FouAddr,FouPost,FouOrg")] PostZero postZero, PostOne postOne, PostFou postFou)
{
// ...
return View(postFou);
}

您的视图不期望此类型的对象,并显示错误。