当前位置:  开发笔记 > 编程语言 > 正文

MVC批量编辑 - Linq到Sql列表保存

如何解决《MVC批量编辑-Linq到Sql列表保存》经验,为你挑选了0个好方法。

为了了解使用MVC和Linq to SQL的一些基础知识,我正在努力改编Stephen Walther的TaskList应用程序:

我正在使用Steve Sanderson博客中描述的概念添加批量编辑系统.

这一切都按预期工作,但是,我在保存返回的任务列表时遇到问题.发布到我的BulkEdit循环返回列表并更新我的LinqToSql db任务列表中的每个项目.

我的BulkEdit视图继承ViewPage>并如下所示:

<% 
using (Html.BeginForm())
{
%>
        
<% foreach (var task in ViewData.Model) { Html.RenderPartial( "TaskEditor", task, new ViewDataDictionary(ViewData) { {"prefix", "tasks"} } ); } %>
<% } %>

TaskEditor控件继承System.Web.Mvc.ViewUserControl并如下所示:

<%= 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)%>

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 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有点太过分了?

推荐阅读
夏晶阳--艺术
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有