我收到的错误消息:
找不到资源。说明:HTTP 404。要查找的资源(或其依赖项之一(可能已被删除、名称已更改或暂时不可用。 请查看以下 URL 并确保拼写正确。
请求的网址:/成员/编辑成员
调用 Edit 方法的操作链接如下所示:
@Html.ActionLink("Rediger", "EditMember", new { item.MemberID })
以及表示"编辑成员"页面的视图:
@using (Html.BeginForm("EditMember", "Member", FormMethod.Post))
{
@Html.AntiForgeryToken()
<div class="form-horizontal">
<hr />
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
@Html.HiddenFor(model => model.MemberID)
<div class="form-group">
@Html.LabelFor(model => model.FirstName, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.FirstName, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.FirstName, "Navn skal angives", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.LastName, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.LastName, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.LastName, "", new { @class = "text-danger" })
</div>
</div
...
}
控制器动作:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult EditMember(Member model)
{
Member members = new Member();
var member = DBContext.Members.Find(model.MemberID);
if (member == null)
{
return HttpNotFound();
}
if(ModelState.IsValid)
{
DBContext.SaveChanges();
}
return View(member);
}
我还尝试更改操作方法参数,因此看起来像这样
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult EditMember(int? id) { ... }
但错误保持不变。
然而。。。
如果我删除[HttpPost
注释,则错误消失,它将找到请求的URL。但它只是不会提交更改并将其保存到数据库中。
也就是说,如果我这样做:
[ValidateAntiForgeryToken]
public ActionResult EditMember(Member model)
然后,它会查找请求的 URL,但不保存对数据库所做的更改。
我的问题可能是什么?
我怀疑你没有在 HttpGet 方法中传递 Id。这可能是由于使用 ViewModel 显示成员信息。
表中没有具有指定成员 ID 的行。
在你的控制器中,你应该有两个操作(HttpGet 和 HttpPost(
[HttpGet]
public ActionResult EditMember(int id)
{
var member = db.member..SingleOrDefault(x => x.Id == id);
if (member != null)
{
var memberViewModel = new MemberViewModel();
memberViewModel.MemberID = member.Id;
memberViewModel.FirstName = member.FirstName;
memberViewModel.LastName = member.LastName;
return View(memberViewModel);
}
return View();
}
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult EditMember(Member model)
{
Member members = new Member();
var member = DBContext.Members.Find(model.MemberID);
if (member == null)
{
return HttpNotFound();
}
if(ModelState.IsValid)
{
DBContext.SaveChanges();
}
return View(member);
}