Sitecore mvc在同一页面中处理多个表单

时间:2013-06-25 05:22:34

标签: asp.net-mvc sitecore sitecore7 sitecore-mvc

我正在使用Sitecore 7,在我目前遇到问题的页面中,我有一个带有两个控制器渲染的布局(cshtml)。

两个控制器渲染映射到不同的控制器操作但使用相同的控制器。因此控制器渲染A映射到控制器“搜索”,操作“ProductSearch”和控制器渲染B映射到控制器“搜索”,操作“CustomerSearch”

“搜索”控制器中有4种方法。

  1. 返回视图结果的“ProductSearch”
  2. 使用HttpPost属性设置的“ProductSearch”处理表单提交
  3. 返回查看结果的“CustomerSearch”
  4. 使用HttpPost属性设置的“CustomerSearch”处理表单提交
  5. 这就是表单的编写方式

    @using(Html.BeginRouteForm(Sitecore.Mvc.Configuration.MvcSettings.SitecoreRouteName,FormMethod.Post))
            {             
               @Html.Sitecore().FormHandler()   
               //form fields here 
            }
    

    当我提交其中一个表单时,我注意到两个控制器操作都被执行了,这不是我所期待的。

    如果我然后将控制器渲染表单处理程序之一更改为

    @using(Html.BeginRouteForm(Sitecore.Mvc.Configuration.MvcSettings.SitecoreRouteName,FormMethod.Post))
            {             
               @Html.Sitecore().FormHandler("search","customersearch")   
               //form fields here 
            }
    

    然后只调用一个控制器动作,但页面仅从该控制器动作

    呈现视图结果

    有什么我想念的吗?

1 个答案:

答案 0 :(得分:0)

我从https://bitbucket.org/demoniusrex/launch-sitecore-mvc-demo/src

找到了一些线索

基本上是为了让Sitecore在执行POST时呈现整个布局。在控制器操作中,我们需要通过调用Index()来返回ActionResult - 您的控制器需要继承SitecoreController。

Index()方法负责渲染整个布局,并初始化所有渲染和关联模型。了解如何在上面的链接中初始化模型类,了解如何完成此操作。