0

运行 Sitecore 7.1 update 2,我正在创建一个登录表单,设置如下:

"LoginController" 有方法 "Index" 和 "Login" 和一个视图 "Index"

创建控制器渲染,控制器字段具有“命名空间和 dll”,操作字段具有“索引”。我正在使用 MVC 区域,这就是我必须指定命名空间和 dll 的原因。

内容项的布局配置了“索引”控制器呈现

“索引”视图具有以下代码(起初我使用了正常的 MVC 开始表单,但它不起作用):

@using (Html.BeginRouteForm(MvcSettings.SitecoreRouteName, FormMethod.Post))
{
    @Html.Sitecore().FormHandler("Login", "Login")
    //form fields...
}

当我使用不正确的凭据提交表单时,我想再次显示表单(视图)并显示错误,我得到了视图,但从布局中删除了。

在我用谷歌搜索解决这个问题之前,我不知道 Sitecore FormHandler 方法,也没有看到它的文档。Sitecore MVC 上的任何资源?请与 Sitecore 7.1 相关的内容,因为我发现的大多数示例都是 Sitecore 6 并且已过时。

谢谢

4

2 回答 2

2

我认为您的问题是由于以下代码行而直接发布到 MVC 操作:

@Html.Sitecore().FormHandler("Login", "Login")

由于sitecore跳过了默认的渲染过程,直接发布到控制器Action。

为了返回完整的布局,将其替换为:

@Html.Sitecore().FormHandler()

您在 sitecore 中的“控制器渲染”项应该有“ Controller ”=“Login”和“ Action ”=“Login”,sitecore 使用它来决定将表单发布到哪个控制器/Action。

不幸的是,Sitecore 还没有提供有关如何处理 MVC 表单的详细信息,但是,有一个 MVC 版本的 Sitecore 启动,您可以在这里查看,那里有一些很好的 MVC 示例,它可能会有所帮助。

于 2014-07-08T01:02:38.763 回答
1

使用 Sitecore,您不能在没有任何额外逻辑/代码的情况下使用默认 MVC。这是因为在 ASP.NET MVC 中,每个请求只有一个控制器/操作。在 Sitecore MVC 中,您可以在一个页面请求上拥有多个具有多个操作的控制器。

在 Sitecore MVC 中有几种处理表单帖子的方法。是一个很好的开始资源。我更喜欢有一个非常像 ASP.NET MVC 的解决方案,我认为这也是您的想法:使用我的博客中描述的方法,您可以使用正常@Html.BeginForm()并使用自定义属性来指定应该调用哪个控制器操作。有了这个,你可以在登录失败时显示错误消息,并在登录正常时做任何你想做的事情。这也适用于一页请求中的多个表单。

于 2014-07-08T06:01:28.573 回答