1

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

4

2 回答 2

0

这是一个如何使用 jQuery 发布以及如何处理验证中的错误的示例。

http://jvance.com/blog/2010/02/20/MakingAnAjaxFormWithJQueryInASPdotNETMVC.xhtml

于 2010-11-01T12:26:44.973 回答
0

在考虑了更多+获得了更多使用MVC的经验之后,我决定分解问题,并得出以下结论。不知道是否有人会觉得它有用

  1. 对于需要字段验证的 Ajax.BeginForm,提交的返回应该返回表单的 html。这样,如果验证失败 - 响应将包含错误消息,并且界面将看起来无缝。结果也很可能包含整个表单,包括它的声明。

  2. 这种情况下的预览是一个简单的问题。当用户点击预览按钮时,可以发布表单,结果将包含填充的表单+预览框。或者,预览按钮可以是一个 Ajax.LinkBut​​ton,它将序列化表单,将数据发布到服务器,然后将其呈现为评论。然后客户端的js会把这个预览放到需要的容器中。

  3. 成功提交后,有几个选项,具体取决于要求和布局。
    a)表单提交的结果可以返回评论 + 空白表单(准备新评论) 例如,当评论表单在所有评论下方时,这看起来好像评论已添加到表单底部
    b)结果可以包含空白表单 + 一个小的 js 脚本,它将更新评论区/加载最新评论到页面
    c)它还可以强制刷新父页面,以确保新发布的评论将立即对用户可见。

    基本上,这种选择取决于特定情况的要求。

于 2011-02-16T22:37:00.213 回答