我一直在玩MVC的不同方面已经有一段时间了,我已经达到了一种情况,我不确定什么是解决问题的最佳方法。我希望SO社区能帮到我这里:P
我在互联网上看到了一些Ajax.BeginForm的例子,这似乎是一个非常漂亮的想法。例如。您有一个选择客户的下拉列表 - 并且在选择一个客户时,它会在页面上的某个占位符中加载此客户的详细信息。这完全没问题。
但是,如果你想在框中加入一些验证怎么办?
假设一个文章页面和底部的用户评论。在评论区域下方有一个ajax-y“添加评论”框。当用户添加评论时,它将显示在评论区域中,位于最后评论下方。
如果我将Ajax.BeginForm设置为将调用结果附加到Comments区域,它将正常工作。但是如果发布的数据无效呢?我没有在评论区域附加“成功”评论,而是要显示用户验证错误。
此时我决定将Ajax.BeginForm中的区域置于局部内,并且窗体的提交将返回此局部。验证工作正常。在每次提交时,我们重新加载表单元素内的内容。但是如何将成功的评论添加到顶部?
需要考虑的其他事项:评论表单还有一个“预览”按钮。当用户点击预览时,我应该将渲染的评论加载到预览框中。这也可能在表单区域内。
我正在考虑使用Json结果。当用户提交表单时,服务器代码将生成具有Success值的Json对象,并将html呈现为部分属性。像
这样的东西{ "success": true, "form": "<html form data>", "comment": "successful comment html to inject into the page" }
这将是一个完美的解决方案,除非在MVC中没有办法在控制器内部渲染部分字符串(上下文分离,还记得吗?)。
UPD:似乎没有人知道这个问题的答案。这是否意味着没有办法做到这一点,或者你只是不知道,伙计们?答案 0 :(得分:0)
以下是如何使用jQuery发布以及如何在验证中处理错误的示例。
http://jvance.com/blog/2010/02/20/MakingAnAjaxFormWithJQueryInASPdotNETMVC.xhtml
答案 1 :(得分:0)
在给予更多考虑+获得更多MVC经验后,我决定解决问题,并得出以下结论。不确定是否有人会发现它有用
使用需要字段验证的Ajax.BeginForm,提交的返回应该返回表单的html。这样,如果验证失败 - 响应将包含错误消息,并且界面将看起来无缝。 结果也很可能包含整个表格,包括声明。
这种情况下的预览是一个简单的问题。当用户单击预览按钮时,可以发布表单,结果将包含填充的表单+预览框。或者,预览按钮可以是一个Ajax.LinkButton,它将序列化表单,将数据发布到服务器,将其呈现为注释。然后,客户端的js将此预览放在所需的容器中。
成功提交后,根据要求和布局,有几种选择
a)表单提交的结果可以返回注释+空白表单(准备好发表新评论)
例如当评论表格低于所有评论时,这看起来好像评论已被添加到表格的底部
b)结果可以包含空白表单+一个小js脚本,它将更新注释区域/将最新注释加载到页面
c)它还可以强制刷新父页面,以确保用户可以立即看到新发布的评论。
基本上,这种选择取决于具体案例的要求。