이 문제에 대한 게시물이 많이 있지만 올바른 해결책을 찾을 수 없습니다. 현재 내 모델, 뷰 컨트롤러는 다음과 같다 :POST 동작 후 복잡한 모델이 null입니다.
보기 :
@model Pro.Web.Models.CatDetailsView
@using (Html.BeginForm("Details", "Cat", Model, FormMethod.Post))
{
@Html.AntiForgeryToken()
@Html.ValidationSummary()
<h2>Details</h2>
<ol>
<li>
@Html.LabelFor(model => model.Cat.Name)
<p>@Html.DisplayFor(model => model.Cat.Name, new { @readonly = "true" })</p>
</li>
<li>
@Html.LabelFor(model => model.Cat.Owner)
<p>@Html.DisplayFor(model => model.Cat.Owner.UserName, new { @readonly = "true" })</p>
</li>
<li>
@Html.LabelFor(model => model.Cat.BornDate)
<p>@Html.DisplayFor(model => model.Cat.BornDate, new { @readonly = "true" })</p>
</li>
<li>
@Html.LabelFor(model => model.Cat.Age)
<p>@Html.DisplayFor(model => model.Cat.Age, new { @readonly = "true" })</p>
</li>
<li>
@Html.LabelFor(model => model.Cat.CatColorValue)
<p>@Html.DisplayEnumFor(model => model.Cat.CatColorValue, typeof(Pro.Web.Models.Entities.Enums.CatColor))</p>
</li>
<li>
@Html.LabelFor(model => model.Cat.Description)
<p>@Html.DisplayFor(model => model.Cat.Description, new { @readonly = "true" })</p>
</li>
</ol>
<input type="submit" value="Edit details" name="Command" />
}
모델 :
public class CatDetailsView
{
public Cat Cat { get; set; }
}
컨트롤러 :
[HttpPost]
public ActionResult Details(CatDetailsView model, string Command)
{
if (Command.Equals("Edit details"))
{
Cat cat = this._catRepository.Find(model.Cat.Id);
if (cat != null)
{
return RedirectToAction("Edit", "Cats", new { id = cat.Id });
}
else
{
return View(model);
}
}
else
{
return View(model);
}
}
,
문제는 컨트롤러가 항상 모델에 대해 null을 받는다는 것입니다. 나는 그 코드를보고 있으며 무엇이 잘못되었는지를 볼 수 없다. 나는 방금 학습을 시작 했으므로 나는 사소한 것을 놓친 것 같다. 나는 누군가가 문제가 될 수있는 아이디어가 있기를 바랍니다.
감사합니다.
결론 : 디스플레이 값을 게시하려면 HiddenFor with DisplayFor를 사용하십시오. –
감사합니다. 이 작품! 나는 값을 필요로하는 모든 곳에서'HiddenFor'를 넣었습니다. 이제 컨트롤러에서 그 값을 얻을 수 있습니다. – Cristiano