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" />
}
其他所有内容都完全符合预期,但我遗漏了一些重要的内容,它们会在回程中加载布局。
答案 0 :(得分:3)
我之前也注意到了这一点,我认为它与这一行有关:
@Html.Sitecore().FormHandler("Registration", "CreateProfile")
它似乎绕过标准渲染管道并只调用目标操作。我写过一篇关于如何控制多个控制器上不同操作的调用的博客文章。这可能会有所帮助:
答案 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中使用的执行生活方式(在帖子中提到)。