MVC 3을 사용하여 DB에있는 요소를 삭제할보기가 있습니다. 서비스 계층은 작업을 승인하기 전에 모든 논리가 제자리에 있는지 확인합니다. 역할 위반의 경우 메시지가 Html.Summary에 표시되므로 삭제 작업이 중단됩니다.데이터가 게시 된 후에보기에 표시되지 않습니다.
내 문제는 서비스 레이어의 Html.Summary에있는 메시지가 다양한 필드의 데이터를 잃어 버려서 항목에 대한 ID, 이름 및 설명을 볼 수 없기 때문에 발생합니다.
나를 올바른 방향으로 안내해 줄 수 있습니까? 내가 뭘 잘못하고있어? 감사합니다
public ActionResult Delete(int id)
{
Typology typology = _typologytService.FindById(id);
TypologyDeleteViewModel deleteViewModel = Mapper.Map<Typology, TypologyDeleteViewModel>(typology);
return View(deleteViewModel);
}
//
// POST: /ManageTypologies/Delete/5
[HttpPost]
public ActionResult Delete(TypologyDeleteViewModel deleteViewModel)
{
if (ModelState.IsValid)
{
Typology typology = Mapper.Map<TypologyDeleteViewModel, Typology>(deleteViewModel);
_typologytService.Delete(typology.TypologyId);
if (ModelState.IsValid)
return RedirectToAction("Index");
}
return View();
}
@model xxx.ViewModels.TypologyDeleteViewModel
@{
ViewBag.Title = "Delete";
}
<h2>
Delete</h2>
<h3>
Are you sure you want to delete this?</h3>
@using (Html.BeginForm())
{
@Html.ValidationSummary(true)
@Html.HiddenFor(model => model.TypologyId)
<fieldset>
<legend>TypologyDeleteViewModel</legend>
<div class="display-label">
TypologyId</div>
<div class="display-field">
@Html.DisplayFor(model => model.TypologyId)
</div>
<div class="display-label">
Name</div>
<div class="display-field">
@Html.DisplayFor(model => model.Name)
</div>
<div class="display-label">
Description</div>
<div class="display-field">
@Html.DisplayFor(model => model.Description)
</div>
<p>
<input type="submit" value="Delete" />
</p>
</fieldset>
}
<div>
@Html.ActionLink("Back to List", "Index")
</div>
감사의 말 Tommy, 코드를 사용하여 @ Html.HiddenFor (모델 => model.TypologyId)로 숨겨진 필드를 추가해야했습니다. @ Html.HiddenFor (model => model.Name) @ Html.HiddenFor model => model.Description) now working – GibboK
_typologytService는 ModelState가 messageg를 추가하지 못하게 만들 수있는 Service Layer이므로 ModelState를 두 번 확인합니다. 보기에 숨겨진 필드를 추가해야하는 이유는 무엇입니까? 많은 감사합니다 나는 당신의 대답을 받아 들일 것입니다 :-) – GibboK
두 계정의 Gotcha - 방금 숨겨진 입력을 되돌려 보내지 않고 어떻게 할 수 있는지에 대한 나의 대답을 업데이트했습니다. 그러나 어느 쪽이든 작동합니다! – Tommy