在C#ASP.NET MVC应用程序中,我使用Link to SQL为我的应用程序提供数据。我有这样的简单数据库架构:
在我的控制器类中,我引用了称为Model
的数据上下文(如您在图片的右侧看到的属性),如下所示:
private Model model = new Model();
我在页面上呈现了Series的表(列表)。它可以正确渲染,我能够添加删除功能来删除Series,如下所示:
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();
行为止。此命令不会对数据库应用“标题”属性(或任何其他)的更改。请帮忙。
编辑:
如果我添加以下行:
model.Series.Attach(series);
就在model.SubmitChanges();
之前,则没有变化-编辑仍然不会反映到数据库中。作为参数传递给Edit方法的实例已经附加到数据上下文model
。编辑:
属于方法Edit的视图代码:
<%@ 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>
最佳答案
这是我们的“编辑操作”的外观(针对您的模型进行调整):
[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执行了某些操作?您还可以在这里发布您的查看代码吗?