在 Model 和 ViewModel 之间传递错误?

Error passing between Model and ViewModel?

上一个问题“ASP .NET Core Repository Id Article传入的被改成了0?”我成功地做到了,但是由于 GitHub 上与团队的冲突,我不得不重写我的代码。但是,当我 运行 它时,模型和视图模型之间存在传输错误。这是什么,我该如何解决?我的代码之间没有任何更改。


控制器

    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult EditArticle(Article article)
    {
        if(!ModelState.IsValid)
        {
            return View(article);
        }
        if(!_studentRepository.EditArticle(article))
        {
            throw new ArgumentException("...");
        }
        return RedirectToAction("Index");
    }

查看

    @model Megatron.ViewModels.ArticleFacultyViewModel
@{
    ViewData["Title"] = "Edit Article";
}
<div>
    <form asp-action="EditArticle">
        <partial name="_StatusMessage" model="@ViewData["Message"]" />
        <div>
            @Html.HiddenFor(a => a.Article.Id)
            <div class="form-group row">
                <div class="col-2">
                    <label asp-for="Article.Title" class="col-form-label"></label>
                </div>
                <div class="col-5">
                    <input asp-for="Article.Title" class="form-control" />
                </div>
            </div>
            <div class="form-group row">
                <div class="col-2">
                    <label class="col-form-label">Type of contribution</label>
                </div>
                <div class="col-3">
                    <button hidden class="btn btn-primary" type="button" data-toggle="collapse" data-target="#ImportFileCollapse" aria-expanded="false" aria-controls="ImportFileCollapse">
                    </button>
                    <button hidden class="btn btn-primary" type="button" data-toggle="collapse" data-target="#TextAreaCollapse" aria-expanded="false" aria-controls="TextAreaCollapse">
                    </button>
                    <button id="button-collapse" class="btn btn-primary" type="button" data-toggle="collapse" data-target=".multi-collapse" aria-expanded="false" aria-controls="ImportFileCollapse TextAreaCollapse">
                        Switch to Editor
                    </button>
                </div>
            </div>
            

你return一个Artical类型模型到post方法中的视图,

if(!ModelState.IsValid)
{
    return View(article);
}

虽然视图期望 ArticleFacultyViewModel 类型模型。你可以转换它。

if(!ModelState.IsValid)
{
    var articleVM = new ArticleFacultyViewModel
    {
        Article = article,
        Faculties = _facultyRepository.GetFaculties()
    };
    return View(articleVM);
}