爲了讓我的頭一輪使用MVC和LINQ一些基本面SQL我工作的適應斯蒂芬·瓦爾特TaskList application:MVC批量編輯 - Sql的Linq列表保存
我添加使用批量編輯系統在Steve Sanderson's blog中描述的概念。
這一切都按預期工作,但是,我無法保存我返回的任務列表。 Post到我的BulkEdit循環遍歷返回的列表並更新我的LinqToSql db任務列表中的每個項目。
我BulkEdit視圖繼承ViewPage<List<TaskList.Models.Task>>
和如下:
<%
using (Html.BeginForm())
{
%>
<div id="items">
<%
foreach (var task in ViewData.Model)
{
Html.RenderPartial(
"TaskEditor",
task,
new ViewDataDictionary(ViewData)
{
{"prefix", "tasks"}
}
);
}
%>
</div>
<input type="submit" value="Save changes" />
<%
}
%>
的TaskEditor控制繼承System.Web.Mvc.ViewUserControl<Models.Task>
,看起來像這樣:
<div>
<%= Html.Hidden(ViewData["prefix"] + ".index", ViewData.Model.Id) %>
<% var fieldPrefix = string.Format("{0}[{1}].", ViewData["prefix"], ViewData.Model.Id); %>
<%= Html.Hidden(fieldPrefix + "Id", ViewData.Model.Id) %>
Description:
<%= Html.TextBox(fieldPrefix + "TaskDescription", ViewData.Model.TaskDescription)%>
Date:
<%= Html.TextBox(fieldPrefix + "EntryDate", ViewData.Model.EntryDate.ToString("o"))%>
Completed:
<%= Html.CheckBox(fieldPrefix + "IsCompleted", ViewData.Model.IsCompleted)%>
</div>
的控制器GET和POST方法如下:
[AcceptVerbs(HttpVerbs.Get)]
public ActionResult BulkEdit()
{
var tasks = from t in db.Tasks orderby t.EntryDate descending select t;
return View(tasks.ToList());
}
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult BulkEdit(IList<Task> tasks)
{
foreach(Task task in tasks)
{
foreach(Task dbTask in db.Tasks)
{
if (dbTask.Id == task.Id)
{
dbTask.TaskDescription = task.TaskDescription;
dbTask.EntryDate = task.EntryDate;
dbTask.IsCompleted = task.IsCompleted;
}
}
}
db.SubmitChanges();
return RedirectToAction("Index");
}
我的問題是,這似乎太複雜的,我還沒有考慮添加或刪除列表中的任務。我寧願做是一樣的東西
db.Tasks = tasks;
,讓LINQ的做這一切的神奇制定出哪些已經改變,哪些是新/老。
這可能嗎?或者我很快就會對Linq有點太期待?