我使用MVC 3,我有一个视图删除我的数据库中的元素。服务层在授权操作之前检查所有逻辑是否在位。在违反角色的情况下,消息出现在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>
感谢汤米,我用你的代码,加上我有添加一些隐藏的字段为@ Html.HiddenFor(型号=> model.TypologyId) @ Html.HiddenFor(型号=> model.Name) @ Html.HiddenFor( model => model.Description)现在正在工作 – GibboK 2012-07-11 20:13:12
我正在检查ModelState两次,因为_typologytService是服务层,可以使他ModelState无效添加一些messageg。我可以问你为什么我不得不在视图中添加隐藏字段?非常感谢我会接受你的回答:-) – GibboK 2012-07-11 20:15:02
在两个帐户上都陷入困境 - 我刚刚发现我的错误更新了如何在不传递隐藏输入的情况下做到这一点的答案。但无论哪种方式工作! – Tommy 2012-07-11 20:17:01