asp.net-mvc – 为什么ASP.NET MVC默认的模型绑定器很慢?做好工
在当前的项目中,客户要求以两种方式回答问卷的可能性:使用向导(一次一个问题)和列表(所有问题一次)以单一形式。两种方式都已经实现。
使用AJAX(这是超级快速),手册章节从数据库中加载了这些问题。目前最大的一章有230个问题(每个都有4个HTML输入字段 – 输入/文本,选择等)。如果用户选择这样的章节以列表格式回答,< form>将包含约920个字段以发布到服务器。 我正在做一个AJAX POST请求,通过jQuery的serialize方法传递数据: data: $("#questions :input").serialize() 此序列化需要207.143ms才能完成。我在Firefox中使用Firebug调试此值: console.profile(); $("#questions :input").serialize(); console.profileEnd(); 再次这是超快的… 当使用以下操作方法对接收到的数据进行保湿时,会出现问题: public async Task<ActionResult> ListSaveAsync(IEnumerable<AnswerViewModel> questions) 如您所见,发布的数据是绑定到IEnumerable< AnswerViewModel>的数据。的问题。 AnswerViewModel只有4个字段来存储每个答案。 事情是,在点击“保存”按钮以在此操作方法上点击一个断点之后,需要相当长的时间(正好是10秒),也就是说,大概在模型绑定中花了10秒钟。 一件重要的事情是,我使用史蒂夫·桑德森的@Html.BeginCollectionItem helper来帮助从HTTP POST实现ViewModel集合属性。查看数据在ViewModel(Keys)中如何获取: 你知道我可以尝试做哪些优化? 我想到了4个解决方法: >仅保存修改后的问题。为此,我需要在加载列表时将每个答案值存储在数据属性中,并将其与实际值进行比较,当提交< form>正如这个人建议here。 你还建议什么? 更新1 我选择了3,并实现了一个自定义的模型绑定器:AnswerModelBinder:IModelBinder并使用它在具体的操作方法: public async Task<ActionResult> ListSaveAsync( [ModelBinder(typeof(AnswerModelBinder))]List<AnswerViewModel> questions) 现在需要10秒才能完成只需2秒钟。 >看起来像默认模型绑定器验证检查[ModelState]对性能有很大的影响。 更新2 我刚刚经历过一次:有一个List< Guid>作为一个动作参数,通过一个$ .getJson调用只传递59个字符串需要?3秒钟来触发动作方法第一行的断点。将参数类型更改为List< string>使整个事情都在眨眼间工作。 一个有趣的事实是,在动作方法中我做到了这一点: List<Guid> userIds = resources.Select(Guid.Parse).ToList(); 并转换资源列表< string>列表< Guid>瞬间。 肯定有一些bug与ASP.NET模型绑定。我只想知道是什么… (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-core – MVC 6中的自定义Razor视图引擎
- asp.net – 在JavaScript中访问asp:hiddenfield控件
- ASP.NET MVC中引用JavaScript的正确方法?
- ASP.NET OAuth授权 – 使用ClientId和Secret以及用户名和密
- asp.net – 如何从Javascript调用控制器方法
- asp.net-mvc-4 – MVC 4创建slug类型url
- iis-7 – ASPError对象在我的自定义错误页面上不包含任何数
- asp.net-mvc – asp.net mvc Ajax.BeginForm
- asp.net-mvc – MVC3分页,每页项目数
- asp.net-mvc – Visual Studio 2015 – ASP.Net应用程序将不
- asp.net – “填充无效,不能删除”异常WebResour
- asp.net-mvc – 从Visual Web Developer Express
- asp.net-mvc – 为什么我的ViewModel在[HttpPost
- 你需要知道的这几种 asp.net core 修改默认端口的
- ASP.NET Response.Redirect使用302而不是301
- ASP.NET Core应用的错误处理[1]:三种呈现错误页
- ASP.NET MVC – 将XHTML添加到验证错误消息中
- asp.net-mvc – 我一直在使用MVC3获取HTML5语法错
- asp.net-web-api – Web Api使用IDependencyReso
- asp.net – asp:repeater – 部分更改时的标头