В приложении C # ASP.NET MVC я использую Link to SQL для предоставления данных для моего приложения. У меня есть простая схема базы данных, как это:
Моя база данных http://www.freeimagehosting.net/uploads/756d306565.jpg
В моем классе контроллеров я ссылаюсь на этот контекст данных, называемый 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 })%>
Также create (реализованный аналогичным образом) работает нормально. Однако редактирование не работает. Моя правка выглядит так:
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:
Код представления, принадлежащий методу Правка:
<%@ 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>