gpt4 book ai didi

c# - ASP.NET MVC 2 UpdateModel() 不更新内存或数据库中的值

转载 作者:行者123 更新时间:2023-11-30 21:21:04 26 4
gpt4 key购买 nike

我是 MVC 的新手,所以正在学习 NerdDinner 教程,here .特别是,我在使用 UpdateModel 方法时遇到了问题,该方法在该教程的第五部分中进行了解释。问题是,当我尝试使用 UpdateModel 方法编辑晚餐对象的值时,这些值不会更新,也不会抛出任何异常。

奇怪的是,我在使用教程中说明的创建或删除功能时没有遇到任何问题。只有更新功能不起作用。

下面,我包含了我正在使用的 Controller 代码,以及 View 标记,它包含在 aspx View 文件和 ascx 局部 View 文件中。

这是我的 Controller 中的代码,称为 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 not updating but not throwing error

不幸的是,该解决方案对我没有帮助。

这是我的 Dinners/Edit.aspx View 中的相应标记:

<asp:Content ID="Main" ContentPlaceHolderID="MainContent" runat="server">

<h2>Edit Dinner</h2>

<% Html.RenderPartial("DinnerForm"); %>

</asp:Content>

这是我的 DinnerForm.ascx 局部 View 中的相应标记。 这个部分 View 文件也被创建功能使用,它工作正常:

<%=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>

<% } %>

无论如何,我已经为此苦苦思索了几个小时,但我没有主意。所以,我希望这里有人可以帮助我朝着正确的方向前进,以便弄清楚我做错了什么。

最佳答案

dinnerRepository.Save() 是实际更新数据库的代码。 UpdateModel(dinner) 所做的是从表单集合中提取值并将它们放入您的 dinner 对象中。

关于c# - ASP.NET MVC 2 UpdateModel() 不更新内存或数据库中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2936927/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com