在C#ASP.NET MVC应用程序中,我使用Link to SQL为我的应用程序提供数据。我有这样的简单数据库架构:
c# - 在DataContext上调用SubmitChanges不会更新数据库-LMLPHP


在我的控制器类中,我引用了称为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执行了某些操作?您还可以在这里发布您的查看代码吗?

10-06 13:22
查看更多