我是 MVC 的新手,所以正在学习 NerdDinner 教程,请点击此处。特别是,我在使用 UpdateModel 方法时遇到了问题,该教程的第五部分对此进行了解释。问题是,当我尝试使用 UpdateModel 方法编辑晚餐对象的值时,这些值不会更新,也不会引发异常。
奇怪的是,我对教程中说明的创建或删除功能没有任何问题。只有更新功能不起作用。
下面,我包含了我正在使用的控制器代码,以及视图标记,它包含在一个 aspx 视图文件和一个 ascx 部分视图文件中。
这是我的控制器中的代码,称为 DinnerController.cs:
//
// GET: /Dinners/Edit/2
[Authorize]
public ActionResult Edit(int id)
{
Dinner dinner = dinnerRepository.GetDinner(id);
return View(new DinnerFormViewModel(dinner));
}
//
// POST: /Dinners/Edit/2
[AcceptVerbs(HttpVerbs.Post), Authorize]
public ActionResult Edit(int id, FormCollection formValues)
{
Dinner dinner = dinnerRepository.GetDinner(id);
try
{
UpdateModel(dinner);
var x = ViewData.GetModelStateErrors(); // <-- to catch other ModelState errors
dinnerRepository.Save();
return RedirectToAction("Details", new { id = dinner.DinnerID });
}
catch
{
ModelState.AddRuleViolations(dinner.GetRuleViolations());
return View(new DinnerFormViewModel(dinner));
}
}
在从另一个 StackOverflow 线程读取可能的解决方案后,添加了带有注释“捕获其他 ModelState 错误”的行,此处:
ASP.NET MVC Updatemodel 不更新但不抛出错误
不幸的是,该解决方案对我没有帮助。
这是我的 Dinners/Edit.aspx 视图中的相应标记:
<asp:Content ID="Main" ContentPlaceHolderID="MainContent" runat="server">
<h2>Edit Dinner</h2>
<% Html.RenderPartial("DinnerForm"); %>
</asp:Content>
这是我的 DinnerForm.ascx 部分视图中的相应标记。这个部分视图文件也被创建功能使用,它工作正常:
<%=Html.ValidationSummary("Please correct the errors and try again.") %>
<% using (Html.BeginForm()) { %>
<fieldset>
<p>
<label for="Title">Dinner Title:</label>
<%=Html.TextBoxFor(model => Model.Dinner.Title)%>
<%=Html.ValidationMessage("Title", "*") %>
</p>
<p>
<label for="EventDate">EventDate:</label>
<%=Html.TextBoxFor(model => Model.Dinner.EventDate, new { value = String.Format("{0:g}", Model.Dinner.EventDate) })%>
<%=Html.ValidationMessage("EventDate", "*") %>
</p>
<p>
<label for="Description">Description:</label>
<%=Html.TextBoxFor(model => Model.Dinner.Description)%>
<%=Html.ValidationMessage("Description", "*")%>
</p>
<p>
<label for="Address">Address:</label>
<%=Html.TextBoxFor(model => Model.Dinner.Address)%>
<%=Html.ValidationMessage("Address", "*") %>
</p>
<p>
<label for="Country">Country:</label>
<%=Html.DropDownListFor(model => Model.Dinner.Country, Model.Countries)%>
<%=Html.ValidationMessage("Country", "*") %>
</p>
<p>
<label for="ContactPhone">ContactPhone #:</label>
<%=Html.TextBoxFor(model => Model.Dinner.ContactPhone)%>
<%=Html.ValidationMessage("ContactPhone", "*") %>
</p>
<p>
<label for="Latitude">Latitude:</label>
<%=Html.TextBoxFor(model => Model.Dinner.Latitude)%>
<%=Html.ValidationMessage("Latitude", "*") %>
</p>
<p>
<label for="Longitude">Longitude:</label>
<%=Html.TextBoxFor(model => Model.Dinner.Longitude)%>
<%=Html.ValidationMessage("Longitude", "*") %>
</p>
<p>
<input type="submit" value="Save"/>
</p>
</fieldset>
<% } %>
无论如何,我已经为此努力了几个小时,而且我没有想法。所以,我希望这里有人可以帮助我朝着正确的方向前进,以便找出我做错了什么。