真实世界MVC - 处理表格

Gre*_*reg 9 language-agnostic model-view-controller design-patterns

我仍然对MVC应该如何工作感到困惑.

可以说我有一个销售小部件的网站.我有一个列表页面/widgets/list和一个产品页面/widgets/product/123.

这两个都可以使用widget控制器并调用listproduct方法 - 到目前为止足够简单.让我们说我还有其他几个控制器用于各种事情.

现在我在我的标题中添加一个简报注册框 - 即在网站的每个页面上.这怎么样?我明白它应该提交给/newsletter/signup

但是如果出现错误会发生什么(比如你没有正确填写你的电子邮件地址)?它应显示您所在的任何页面(例如/widgets/list)但newsletter控制器需要运行.该widget控制器不知道的newsletter控制器,所以我不能把代码有...这是怎么应该工作?

编辑:请不要AJAX - 我可以更容易理解.当javascript被禁用时,请考虑这是后备.

编辑2:非常感谢任何涵盖此类事物的示例或教程

编辑3:视图是否允许调用操作?例如,标题可能会调用Newsletter->index()

Gus*_*uss 6

我不明白为什么每个页面上的简报框的错误消息都必须在同一页面中呈现.如果您有一个页面发布到另一个操作 - 与当前视图完全无关(例如 - 搜索),则没有理由在原始页面中显示错误消息.你会在同一页面上显示成功消息吗?那会被处理?

新闻稿表单的错误消息应显示在专用于新闻稿的视图中.例如,看看它在Stackoverflow中是如何完成的 - 进入搜索框并输入任何内容,只需按Enter即可.这是一种错误,因为您没有指定要搜索的内容.然后,Stackoverflow将带您进入另一个解释搜索工作方式的页面.

现在为什么这样做?原因很简单 - 用户在某个页面上并选择参与与当前页面无关的活动,因此没有理由将它们保留在那里.

  • 要添加:要保留用户最后所在位置的"标记",您可以使用cookie或将查询字符串附加到URL.例如:`/ newsletter/signup?return_to = widgets/list` (2认同)

Aar*_*lla 0

您必须将错误消息放在页面控制器(包括“子控制器” newsletter)可以拾取的某个全局位置。

在 AJAX 的情况下,您可以让newsletter控制器与它可见的位置对话DIV(因为您没有重新加载整个页面)。为此,您需要在页面中调用一段 JavaScript,当 AJAX 请求完成时,该 JavaScript 将获取字符串并将其放在您想要的位置。