为了使用MVC和 Linq to sql来解决一些基本问题,我正在努力改编Stephen Walther的 TaskList application:

我正在使用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列表保存的更多相关文章

  1. Project Perfect让Swift在服务器端跑起来-Perfect in Visual Studio Code (四)

    VisualStudioCode是一个轻量级的编辑器,但也功能丰富,通过插件你可以完成如Cordova,ReactNative,NodeJS,PHP,ASP.NETCore的开发。上文通过VisualStudioCode对Perfect文件进行编辑,但编译过程还是在终端中完成。其实通过对VisualStudioCode添加tasks.json就可以完成对Perfect项目的编译工作。这里有个疑问,为何选择VisualStudioCode?这是一个好复杂的三角关系,如图:Microsoft+Swift+Li

  2. Project Perfect让Swift在服务器端跑起来-Perfect in Visual St

    VisualStudioCode是一个轻量级的编辑器,但也功能丰富,通过插件你可以完成如Cordova,ReactNative,NodeJS,PHP,ASP.NETCore的开发。上文通过VisualStudioCode对Perfect文件进行编辑,但编译过程还是在终端中完成。其实通过对VisualStudioCode添加tasks.json就可以完成对Perfect项目的编译工作。这里有个疑问,为何选择VisualStudioCode?{"version":"0.1.0","command":"make

  3. android – isApplicationBroughtToBackground安全功能经常行为不端

    我正在使用它来实现一个安全功能,如果我的应用程序从其他应用程序返回后重新获得焦点,则会显示锁定屏幕.现在,问题是安全功能有时会显示两次.在挖掘了一下后,我注意到ActivityManager.getRunningTasks(1)中的topActivity有时仍然是您刚刚返回的活动.就我而言,令人讨厌的挥之不去的应用程序是com.android.mms和com.google.android.apps

  4. .net – Android Xamarin应用程序中的System.Threading.Tasks.RangeWorker.FindNewWork中的NullReferenceException

    任何有助于进一步解决这个问题的帮助都会受到欢迎.谢谢编辑:我知道没有太多要做但是因为这是我在HockeyApp中获得的唯一堆栈跟踪而我无法复制,我不知道是什么代码导致了这一点.我正在寻找的是更多关于什么可能导致Mono线程代码在我自己不管理线程时具有空引用异常的线索.或者这个堆栈跟踪只是一个红色的鲱鱼,我需要在其他地方寻找?

  5. android – 检查应用程序是否在后台

    我实际上正在使用此代码来检查onPause中的应用程序是否转到后台.到目前为止,这段代码在Android4.4中运行良好.如果现在我检查topAPN并且它们是相同的.你知道如何解决这个问题吗?解决方法我遇到了同样的问题.我为新版本解决了它.只需使用此代码并且在onPause方法中以这种方式调用此函数我不知道令人兴奋的原因,但可能是因为处理程序中的差异线程我得到了正确的值

  6. Android开发之Gradle 进阶Tasks深入了解

    这篇文章主要为大家介绍了Android开发之Gradle 进阶Tasks深入了解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  7. Python Asyncio中Coroutines,Tasks,Future可等待对象的关系及作用

    这篇文章主要介绍了Python Asyncio中Coroutines,Tasks,Future可等待对象的关系及作用,文章围绕主题展开详细的内容介绍,需要的小伙伴可以参考一下

  8. 使用GruntJS构建Web程序之Tasks(任务)篇

    任务(Tasks)是grunt的核心概念,你所做的很多工作比如资源合并(concat)、压缩(uglify)都是在配置任务。每次grunt运行的时候,你指定的一个或多个任务也在运行,如果你没有指定任务,那么一个默认名为“default”的任务将自动运行。

  9. 如何在c中使用Linq读取Json文件#

    我有下面的Json文件,我需要获取“rec”的role_to_secrets,然后我应该为“prod”环境获取各自的secret值。

  10. FirstOrDefault正在生成异常System.NullReferenceException

    所以我有一个文档字段,里面有其他对象,我需要这个值。如果对象或值为空,并且字符串为空,我该怎么办?

随机推荐

  1. c# – (wpf)Application.Current.Resources vs FindResource

    所以,我正在使用C#中的WPF创建一个GUI.它看起来像这样:它现在还没有完成.这两行是我尝试制作一种数据表,它们在XAML中是硬编码的.现在,我正在C#中实现添加新的水果按钮功能.我在XAML中有以下样式来控制行的背景图像应该是什么样子:因此,在代码中,我为每列col0,col1和col2创建一个图像,如果我使用以下代码,它添加了一个如下所示的新行:如你所见,它不太正确……为什么一个似乎忽略了一些属性而另一个没有?

  2. c# – 绑定DataGridTemplateColumn

    似乎我已经打了个墙,试图在DataGrid上使用DataTemplates.我想要做的是使用一个模板来显示每个单元格的两行文本.但是似乎无法以任何方式绑定列.以下代码希望显示我想做的事情.注意每个列的绑定:模板列没有这样的东西,因此,这个xaml不可能工作.我注定要将整个DataTemplate复制到每个列,只是对每个副本都有不同的约束?解决方法我不完全确定你想要做什么,但如果您需要获取整行的DataContext,可以使用RelativeSource绑定来移动视觉树.像这样:

  3. c# – 学习设计模式的资源

    最近我来到了这个设计模式的概念,并对此感到非常热情.你能建议一些帮助我深入设计模式的资源吗?

  4. c# – 是否有支持嵌入HTML页面的跨操作系统GUI框架?

    我想开发一个桌面应用程序来使用跨系统,是否有一个GUI框架,允许我为所有3个平台编写一次代码,并具有完全可脚本化的嵌入式Web组件?我需要它有一个API来在应用程序和网页之间进行交流.我知道C#,JavaScript和一些python.解决方法Qt有这样的事情QWebView.

  5. c# – 通过字符串在对象图中查找属性

    我试图使用任意字符串访问嵌套类结构的各个部分.给出以下(设计的)类:我想要从Person对象的一个实例的“PersonsAddress.HousePhone.Number”获取对象.目前我正在使用反思来做一些简单的递归查找,但是我希望有一些忍者有更好的想法.作为参考,这里是我开发的(crappy)方法:解决方法您可以简单地使用标准的.NETDataBinder.EvalMethod,像这样:

  6. c# – 文件下载后更新页面

    FamilyID=0a391abd-25c1-4fc0-919f-b21f31ab88b7&displaylang=en&pf=true它呈现该页面,然后使用以下元刷新标签来实际向用户提供要下载的文件:你可能需要在你的应用程序中做类似的事情.但是,如果您真的有兴趣在文件完全下载后执行某些操作,那么您的运气不佳,因为没有任何事件可以与浏览器进行通信.执行此操作的唯一方法是上传附件时使用的AJAXupload.

  7. c# – 如何在每个机器应用程序中实现单个实例?

    我必须限制我的.net4WPF应用程序,以便每台机器只能运行一次.请注意,我说每个机器,而不是每个会话.我使用一个简单的互斥体实现单实例应用程序,直到现在,但不幸的是,这样一个互斥是每个会话.有没有办法创建机器互连,还是有其他解决方案来实现每个机器应用程序的单个实例?

  8. c# – WCF和多个主机头

    我的雇主网站有多个主机名,都是同一个服务器,我们只是显示不同的皮肤来进行品牌宣传.不幸的是,在这种情况下,WCF似乎不能很好地工作.我试过overridingthedefaulthostwithacustomhostfactory.这不是一个可以接受的解决方案,因为它需要从所有主机工作,而不仅仅是1.我也看过thisblogpost,但是我无法让它工作,或者不是为了解决我的问题.我得到的错误是“这

  9. c# – ASP.NET MVC模型绑定与表单元素名称中的虚线

    我一直在搜索互联网,试图找到一种方式来容纳我的表单元素的破折号到ASP.NET的控制器在MVC2,3或甚至4中的默认模型绑定行为.作为一名前端开发人员,我更喜欢在我的CSS中使用camelCase或下划线进行破折号.在我的标记中,我想要做的是这样的:在控制器中,我会传入一个C#对象,看起来像这样:有没有办法通过一些正则表达式或其他行为来扩展Controller类来适应这种情况?我讨厌这样的事实,我必须这样做:甚至这个:思考?

  10. c# – 用户界面设计工具

    我正在寻找一个用户界面设计工具来显示文档中可能的GUI.我不能生成代码.我知道MicrosoftVisio提供了一个功能.但有什么办法吗?您使用哪种软件可视化GUI?

返回
顶部