我正在使用Steve Sanderson’s blog中描述的概念添加批量编辑系统.
这一切都按预期工作,但是,我在保存返回的任务列表时遇到问题.发布到我的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>
Controller 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有点太过分了?
解决方法 您正在处理liNQ to sql没有多层故事的事实.我认为这就是你要找的东西:http://blog.irm.se/blogs/eric/archive/2008/08/20/Go-Distributed-With-LINQ-to-SQL.aspx
这个人提出的Merge方法可以很容易地变成DataContext类的“扩展方法”,它几乎就像是在liNQ to sql中构建的.我说几乎是因为你必须包含你的扩展方法所在的命名空间才能使用它.
总结以上是内存溢出为你收集整理的c# – MVC批量编辑 – Linq到Sql列表保存全部内容,希望文章能够帮你解决c# – MVC批量编辑 – Linq到Sql列表保存所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)