在C#ASP.NET MVC应用程序中,我使用链接到SQL为我的应用程序提供数据。我有简单的数据库模式是这样的: My database http://www.freeimagehosting.net/uploads/756d306565.jpg在DataContext上调用SubmitChanges不会更新数据库
在我的控制器类我引用这样叫Model
(你可以在属性画面的右侧看到的)这个数据上下文:
private Model model = new Model();
我有一张在我的页面上呈现的系列表(列表)。它使得正确,我能够添加删除功能删除系列这样的:
public ActionResult Delete(int id) {
model.Series.DeleteOnSubmit(model.Series.SingleOrDefault(s => s.ID == id));
model.SubmitChanges();
return RedirectToAction("Index");
}
在适当情况下采取行动的链接看起来是这样的:
<%: Html.ActionLink("Delete", "Delete", new { id=item.ID })%>
还可以创建(以类似的方式实现)工作正常。但编辑不起作用。我的编辑看起来像这样:
public ActionResult Edit(int id) {
return View(model.Series.SingleOrDefault(s => s.ID == id));
}
[HttpPost]
public ActionResult Edit(Series series) {
if (ModelState.IsValid) {
UpdateModel(series);
series.Title = series.Title + " some string to ensure title has changed";
model.SubmitChanges();
return RedirectToAction("Index");
}
return View(series);
}
我控制了我的数据库有一个正确的主键设置。我调试了我的应用程序,发现一切正常,直到model.SubmitChanges();
。该命令不适用于针对数据库的Title属性(或任何其他)的更改。
请帮忙。
编辑: 如果我加入这一行:model.Series.Attach(series);
只是model.SubmitChanges();
之前没有任何变化 - 编辑仍然没有反映到数据库。作为参数传递给Edit方法的实例已经附加到数据上下文model
。
编辑: 的视图代码属于方法编辑:
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master"
Inherits="System.Web.Mvc.ViewPage<TVSeriesInfoApp.Models.Series>" %>
<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
Edit
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<h2>Edit</h2>
<% using (Html.BeginForm()) {%>
<%: Html.ValidationSummary(true) %>
<fieldset>
<legend>Fields</legend>
<div class="editor-label">
<%: Html.LabelFor(model => model.Title) %>
</div>
<div class="editor-field">
<%: Html.TextBoxFor(model => model.Title) %>
<%: Html.ValidationMessageFor(model => model.Title) %>
</div>
<div class="editor-label">
<%: Html.LabelFor(model => model.Seasons) %>
</div>
<div class="editor-field">
<%: Html.TextBoxFor(model => model.Seasons) %>
<%: Html.ValidationMessageFor(model => model.Seasons) %>
</div>
<div class="editor-label">
<%: Html.LabelFor(model => model.Stars) %>
</div>
<div class="editor-field">
<%: Html.TextBoxFor(model => model.Stars) %>
<%: Html.ValidationMessageFor(model => model.Stars) %>
</div>
<p>
<input type="submit" value="Save" />
</p>
</fieldset>
<% } %>
<div>
<%: Html.ActionLink("Back to List", "Index") %>
</div>
</asp:Content>
视图正常工作我猜是因为我已经控制了返回到Edit方法(使用断点)的系列参数的内容。所有属性都按预期设置,以便视图正常工作。此外,我还没有使用无效值对其进行测试,因此ModelState.isValid()在Edit方法中始终为true。没有业务规则被破坏。不管怎样,我会添加视图代码。 – drasto 2010-05-25 12:07:23
视图代码存在 - 请参阅上次编辑。 – drasto 2010-05-25 12:17:56
当我用你的代码替换我的代码时,它可以工作。 – drasto 2010-05-25 12:50:06