在C#ASP.NET MVC应用程序中,我使用Link to SQL为我的应用程序提供数据。我有这样的简单数据库模式: My database http://www.freeimagehosting.net/uploads/756d306565.jpg
在我的控制器类中,我引用了这个名为Model
的数据上下文(正如您在属性中的图片右侧所示),如下所示:
private Model model = new Model();
我的页面上有一个系列表(List)。它渲染得很好,我能够添加删除功能来删除系列,如下所示:
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>
答案 0 :(得分:4)
这就是我们的编辑操作的样子(根据您的模型调整):
[HttpPost]
public ActionResult Edit(int id, Series series)
{
Series updatingSeries = model.Series.Single(s => s.ID == id);
try
{
TryUpdateModel(updatingSeries);
model.SubmitChanges();
return RedirectToAction("Details", new { id = updatingSeries.ID });
}
catch
{
return View(updatingSeries);
}
}
这可能发生,因为ModelState在某些情况下可能无效。你有没有对View做过什么?您还可以在这里发布您的查看代码吗?
答案 1 :(得分:1)
首先,永远不要使用HTTP GET“删除”(这正是您使用Html.ActionLink("Delete", "Delete", new { id=item.ID })
所做的。
对于修改,您首先必须Attach
将您的实例DataContext
添加到{{1}}。