Sitecore MVC控制器和表单 - ActionResult不在回发时呈现布局

时间:2014-04-22 15:43:30

标签: asp.net-mvc-4 sitecore glass-mapper

Sitecore 7.1v1,最新的Glass Mapper,MVC4。当我们提交表单POST时,我们没有返回View的布局。我不想重定向到另一个页面,因为这应该是一个类似向导的体验。这也是轻量级的,不需要Ajax,尽管我们可以将它作为最后的手段。我找不到谁确保在返回View时我们也得到了布局。我是Sitecore MVC的新手,一般都是MVC的新手。引用的PageBase是使用Glass的自定义模型。

我们有以下控制器渲染:

public class RegistrationController : Controller
{
    [HttpGet]
    public ActionResult VerifyAccount()
    {

        return View("~/Views/Public/Wizards/Registration/VerifyAccount.cshtml",
            new SitecoreContext().GetCurrentItem<PageBase>());
    }
    [HttpPost]
    public ActionResult CreateProfile()
    {
        ViewBag.Name = Request["VerificationType"];
        ViewBag.Step = 2;
        return View("~/Views/Public/Wizards/Registration/CreateProfile.cshtml",
            new SitecoreContext().GetCurrentItem<PageBase>());
    }
}

默认操作是VerifyAccount()。这按预期呈现。初步观点如下:

 @inherits Glass.Mapper.Sc.Web.Mvc.GlassView<Public.Model.GlassModel.Primary.PageBase>

<div>
<h3>@Editable(a => a.Title)</h3>
<p>
    @Editable(a => a.Description)
</p>
<hr />
@using (Html.BeginRouteForm(Sitecore.Mvc.Configuration.MvcSettings.SitecoreRouteName, FormMethod.Post))
{
    @Html.Sitecore().FormHandler("Registration", "CreateProfile")
    @Html.ValidationSummary(true, "Verification Not Selected.")
    <fieldset>
        @Sitecore.Globalization.Translate.Text("$Registration.VerificationTitle")
        @{ var validations = new SitecoreContext().GetItem<GlassFrameBase>(Guid.Parse("{3694FC43-3DB7-470A-A1E9-2649856AAF10}"));}
        <select id="VerType" name="VerificationType">
            @foreach (var validation in validations.GetChildren<VerificationMethod>())
            {
                <option value="@validation.MethodValue">@validation.MethodName</option>
            }
        </select>
        <input type="submit" value="Next" />
    </fieldset>
}

这回发给CreateProfile()方法。这部分效果很好。唯一的问题是,当它这次返回视图时,它只返回没有布局的视图。

最终观点如下:

@using (Html.BeginRouteForm(Sitecore.Mvc.Configuration.MvcSettings.SitecoreRouteName, FormMethod.Post))
{
@Html.Sitecore().FormHandler()
<p>
    <b>Verification Type Was: </b>@ViewBag.Name
</p>
<p>@ViewBag.Step</p>
<input type="hidden" value="ThisIsATest" name="TestHidden" id="TestHidden"/>
<input type="submit" name="back" value="Back" /><br />
<input type="submit" name="next" value="Next" />
}

其他所有内容都完全符合预期,但我遗漏了一些重要的内容,它们会在回程中加载布局。

2 个答案:

答案 0 :(得分:3)

我之前也注意到了这一点,我认为它与这一行有关:

@Html.Sitecore().FormHandler("Registration", "CreateProfile")

它似乎绕过标准渲染管道并只调用目标操作。我写过一篇关于如何控制多个控制器上不同操作的调用的博客文章。这可能会有所帮助:

http://www.experimentsincode.com/?p=425

答案 1 :(得分:1)

尝试将CreateProfile的返回类型从ActionResult更改为PartialViewResult,然后将return View("...更改为return PartialView("...

另外,这里有一篇关于您可以为Sitecore Controller Renderings返回的内容的帖子。 http://mhwelander.net/2014/04/09/sitecore-controller-rendering-action-results-what-can-i-return/

我还没有深入了解使用Controller Renderings发布的表单,但如果上述建议不起作用,那么可以考虑Sitecore MVC中使用的执行生活方式(在帖子中提到)。