asp.net – 在jQuery对话框中的窗体中,MVC中通常采用的方法
将jQuery对话框与ASP.NET MVC集成似乎有几种方法。具体做法是否成为普遍接受的最佳做法呢?
作为示例:我有一个列表页面,其中点击任何列出的项目的“编辑”在jQuery对话框中打开一个表单,填充项目的详细信息。用户编辑详细信息并点击“保存”。如果保存在服务器端成功,则关闭对话框,并使用新数据重新构建列表。如果服务器端的保存失败,对话框将保持打开状态,并向用户显示错误消息。 > No-JSON方法:每个“编辑”链接是一个“编辑”控制器动作的HREF。该控制器操作构建与“列表”视图相同的视图,此外还包括构建编辑表单的部分操作,填充它,并定义javascript以将其打开为jquery对话框。 “保存”是一个表单;如果成功,它会将重定向操作返回到列表页面。如果失败,它会重建整个页面(包括在对话框中弹出的表单),同时显示错误消息。 选项1似乎更符合“纯”ASP.NET MVC。然而,它似乎具有大的HTTP有效载荷(因为我们在每个请求上都将完整的页面发送回浏览器),而且服务器端性能较差(因为我们正在重新构建每个请求的列表)。 选项2似乎更符合更现代的基于Ajax的Web应用程序(较小的HTTP有效载荷,更细粒度的操作)。然而,好像很多控制器都将是JSON控制器,而且我将会编写很多客户端代码来将数据从JSON对象传送到表单域,显示错误消息等。它也似乎是很遗憾,很多很酷的MVC功能,如EditorFor()和ValidationMessageFor()。它只是“感觉”像我正在围绕MVC系统工作,而不是使用它。 [编辑:添加选项3]选项3似乎是1和2之间的混合。我使用“纯”MVC方法来构建和填充表单,并返回一个完全形成的HTML FORM标记。将HTML返回到ajax请求感觉很奇怪,因为它是如此冗长,但我可以解决它。后期操作很好,紧凑的JSON比“ajax”更“感觉”。然而,不幸的是,有效载荷对象是一个FormCollection而不是一个真正的viewmodel对象。似乎我可以利用一些MVC的便利(EditorFor()),而不是其他(ValidationMessageFor())。 我正在寻找“正确”的方式来做到这一点,而不仅仅是最快的方法来一起攻击。是的,是的,我知道没有普遍的“正确”的方式。但我确定有一些明显错误的方法来做,我想避免它们。 我在ASP.NET / C#中很有经验,但我对MVC很新。在此先感谢您的帮助! [编辑] – 杰出的回应 – 我希望能够奖励多个答案/赏金,因为我发现几个答案非常有用。但是,由于我不能,我正在标榜最高评价的答复作为答案。再次感谢所有受访者! 解决方法
我的团队和我有很多经验写AJAX启用的MVC应用程序,我们已经使用了所有3种方法。
然而,我最喜欢的是AJAX-HTML方法 – 使用PartialView来呈现对话框的内容,这可能包括服务器端验证消息和任何其他逻辑。 这种方法的最大好处是分离问题 – 您的视图始终负责呈现HTML,JavaScript不必包含渲染JSON所需的任何文本,标记或“模板”。 另一大优点是,所有伟大的MVC功能都可用于渲染HTML:强类型视图,HtmlHelper,DisplayFor和EditorFor模板,DataAnnotations等。这使得更容易保持一致,并且很好地重构。 请记住,没有必要坚持单一的方法。当你的AJAX调用只需要一些简单的事情,例如像“Success”这样的状态更新,只需使用一个字符串或者JSON来传达这些消息就可以了。在需要HTML时使用PartialView,并且在需要通信时使用更简单的方法。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net – HttpError iis config在添加默认路径时抛出异常
- asp.net-mvc – Sitecore 7.5 MVC和HttpContext.Session.Ti
- 动手写一个简版 asp.net core
- 当InternalsVisibleToAttribute特性遭遇"强签名"
- asp.net – RaisePostBackEvent没有触发
- asp.net – 用于Basic或Windows身份验证的无限重定向循环?
- asp.net – 带有UpdatePanel Viewstate问题的JQuery BlockU
- asp.net – iis将子域重定向到同一子域的子文件夹
- asp.net – Jquery验证插件是否需要表单标记?
- asp.net – 由Chrome和FF破坏的会话变量