2010-04-24 27 views
1

一段时间以来,我一直在玩MVC的不同方面,而且我不知道什么是解决问题的最佳方式。我希望SO社区将帮助我在这里:PASP.NET MVC2中的Ajax注释表单,howto?

我见过一些Ajax.BeginForm在互联网上的例子,它似乎是一个非常漂亮的想法。例如。你有一个下拉选择一个客户 - 选择一个它会在页面上的某个占位符中加载该客户的详细信息。这工作非常好。

但是如果你想在盒子里进行一些验证,该怎么办?

只是假设,想象一个文章页面,用户评论在底部。在评论区域下方有一个ajax-y“添加评论”框。当用户添加评论时,它将出现在评论区域中,在最后的评论下方。

如果我设置Ajax.BeginForm将调用的结果附加到注释区域,它将正常工作。但是,如果发布的数据无效,该怎么办?我不必向评论区域添加“成功”评论,而必须显示用户验证错误。

在这一点上,我决定内部的Ajax.BeginForm区域将在一个部分内,并且表单的submits将返回这个部分。验证工作正常。在每次提交时,我们重新加载表单元素中的内容。但是如何将成功的评论添加到顶部?

要考虑的其他事项:评论表单还有一个“预览”按钮。当用户点击预览时,我应该将渲染的注释加载到预览框中。这可能也在表单区域内。

我想使用Json结果代替。当用户提交表单时,服务器代码将生成一个带有成功值的Json对象,而HTML将部分作为一些属性呈现。像

{ "success": true, "form": "<html form data>", "comment": "successful comment html to inject into the page" } 

这样的东西将是一个完美的解决方案,但有一个在MVC没有办法使部分转换为字符串,在控制器内(背景的分离,还记得吗?)。

UPD:似乎没有人知道这个问题的答案......这是否意味着没有办法做到这一点,或者你只是不知道,家伙?

+0

这不是没有人回答。目前还不清楚你的问题是什么。 – 2010-11-01 12:25:01

回答

0

赋予它更多地考虑+获得与MVC更多的经验后,我决定打破这个问题,并得出以下结论。不知道是否有人会觉得它有用

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

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

  3. 成功提交后,根据需求和布局,有几个选项。
    a)表单提交的结果可以返回评论+空白表单(准备发表新评论) 当评论表单低于所有评论时,这看起来好像评论已被添加到表单底部
    b)结果可以包含空白表单+将更新评论区域的小型js脚本/将最新的评论加载到页面
    c)它也可以强制刷新父页面,以确保新发布的评论将立即可见的用户。

    基本上,这个选择取决于具体情况的要求。