运行Sitecore 7.1更新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和过时的。
由于
答案 0 :(得分:2)
我认为您的问题是由于以下代码行而直接发布到MVC操作:
@Html.Sitecore().FormHandler("Login", "Login")
由于sitecore跳过默认呈现过程,并直接发布到控制器Action。
要返回完整版面,请将其替换为:
@Html.Sitecore().FormHandler()
sitecore中的“控制器呈现”项应具有“控制器”=“登录”和“操作”=“登录”,哪个sitecore用于决定将表单发布到哪个控制器/操作。
不幸的是,Sitecore还没有提供关于如何处理MVC表单的更多细节,但是,有一个MVC版本的Sitecore启动,您可以看一下here,那里有一些很好的MVC示例,它可能有所帮助。
答案 1 :(得分:0)
使用Sitecore,您无法在没有任何其他逻辑/代码的情况下使用默认MVC。这是因为在ASP.NET MVC中,每个请求只有一个控制器/操作。在Sitecore MVC中,您可以在一个页面请求中拥有多个具有多个操作的控制器。
在Sitecore MVC中有几种处理表单帖子的方法。 This here一个很好的资源。我更喜欢有一个非常类似于ASP.NET MVC的解决方案,我认为这也是你的想法:使用描述in my blog的方法,您可以使用普通@Html.BeginForm()
并使用自定义属性来指定哪个应该调用控制器动作。如果登录失败,您可以显示错误消息,并在登录正常时执行任何操作。这也适用于一个页面请求中的多个表单。