ViewModels を使用して、ビューからコントローラーに、またはその逆に情報を渡すことについて学んでいます。作成アクション、ビュー、およびビューモデルは完全に機能していますが、編集アクションに問題があります。エラーが発生します:
ディクショナリに渡されたモデル アイテムのタイプは「CatVM.Models.Cat」ですが、このディクショナリにはタイプ「CatVM.Models.EditCatViewModel」のモデル アイテムが必要です。
これが私のコードです:
コントローラーの方法
// GET: /Cats/Edit/5
public ActionResult Edit(int? id)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
Cat cat = unitOfWork.CatRepository.GetByID(id);
if (cat == null)
{
return HttpNotFound();
}
return View(cat);
}
意見
@model CatVM.Models.EditCatViewModel
@{
ViewBag.Title = "Edit";
}
<h2>Edit</h2>
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
<div class="form-horizontal">
<h4>Cat</h4>
<hr />
@Html.ValidationSummary(true)
@Html.HiddenFor(model => model.ID)
<div class="form-group">
@Html.LabelFor(model => model.Name, new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.Name)
@Html.ValidationMessageFor(model => model.Name)
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.Color, new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.Color)
@Html.ValidationMessageFor(model => model.Color)
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.FurLength, new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.FurLength)
@Html.ValidationMessageFor(model => model.FurLength)
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.Size, new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.Size)
@Html.ValidationMessageFor(model => model.Size)
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Save" class="btn btn-default" />
</div>
</div>
</div>
}
<div>
@Html.ActionLink("Back to List", "Index")
</div>
@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
}
EditCatViewModel
public class EditCatViewModel
{
public int ID { get; set; }
[Required]
[StringLength(50)]
public string Name { get; set; }
[Required]
[StringLength(50)]
public string Color { get; set; }
[Required]
[StringLength(50)]
[Display(Name = "Fur Type")]
public string FurLength { get; set; }
[StringLength(50)]
public string Size { get; set; }
}
}