В приложении C# ASP.NET MVC я использую ссылку для SQL для предоставления данных для своего приложения. Я получил простую схему базы данных, как это: My database http://www.freeimagehosting.net/uploads/756d306565.jpgВызов SubmitChanges в DataContext не обновляет базу данных
В моем классе контроллера я ссылаться на этот контекст данных, который называется 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 (или любого другого) к базе данных.
Пожалуйста, помогите.
EDIT: Если добавить эту строку: model.Series.Attach(series);
как раз перед model.SubmitChanges();
нет никаких изменений - редактирует все еще не отражает в базу данных. Экземпляр передан методу Edit, поскольку параметр уже привязан к контексту данных model
.
EDIT: код зрения, что принадлежит метод 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>
Вид отлично работает, я думаю, потому что я контролировал содержимое параметра серии, возвращаемого методу Edit (используя точку останова). Все свойства установлены так, как ожидается, так что представление работает нормально. Кроме того, я еще не тестировал его с недопустимыми значениями, поэтому ModelState.isValid() всегда верен внутри метода редактирования. Также не нарушены правила ведения бизнеса. В любом случае, добавьте код просмотра. – drasto
Код вида есть - см. Последнее редактирование. – drasto
Когда я заменяю свой код на ваш, он работает. – drasto