一段时间以来,我一直在研究 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:似乎没有人知道这个问题的答案。这是否意味着没有办法做到这一点,或者你们只是不知道,伙计们?