EPiServer MVC currentPage问题

时间:2014-11-13 08:30:22

标签: c# asp.net-mvc episerver

我目前在使用以下代码片段方面遇到了一些问题,这些代码片段与我几乎完全相同,但表现不一样。

这些片段来自我正在处理的两个不同的项目,它们以相同的方式构建,但只有一个正常工作。

这些是我进入控制器的表格:

表单1,位于_Layout文件中的twitter bootstrap下拉菜单中:

    @using (Html.BeginForm("EditProfile", "ProfilePage", FormMethod.Post))
    {
    <li>
        <button type="submit" class="dropdownButton">Redigera Profil</button>
    </li>
    }

表单2,尝试了不同的位置,但现在它位于块视图的表格中:

    <td>
        @using (Html.BeginForm("EditProfile", "ProfilePage", FormMethod.Post))
        {
            <button type="submit">Redigera profil</button>
        }
    </td>

两者看起来完全相同,对吧?

现在这里是控制器

控制器1:

    public ActionResult EditProfile(ProfilePage currentPage)
    {
        var model = new ProfilePageViewModel(currentPage);
        model.CurrentUser = ConnectionHelper.GetUserInformationByEmail(User.Identity.Name);
        return View("EditProfile", model);
    }

控制器2:

    public ActionResult EditProfile(ProfilePage currentPage)
    {
        ProfilePageViewModel model = new ProfilePageViewModel(currentPage);
        model.currentUser = ConnectionHelper.GetCurrentUserByEmail(User.Identity.Name);
        return View("EditProfile", model);
    }

也非常相同。

我在两个项目中添加了相同的路由:

    protected override void RegisterRoutes(RouteCollection routes)
    {
        base.RegisterRoutes(routes);
        routes.MapRoute(
          "Default",                                             
          "{controller}/{action}/{id}",                           
          new { controller = "Home", action = "Index", id = "" });
    }

现在问题在于:

表单1和控制器1完美地工作并且没有任何问题地收到ProfilePage currentPage,但是表单2和控制器2不起作用并且获得空值。 正如我之前所说,表格1发布在_Layout页面上,表格2发布在一个块中,该块在mvc @section中呈现。我不认为这是问题所在,因为我试图从页面的不同部分访问控制器,但它无法在任何地方工作 - 但在另一个项目中它正在工作无处不在,这让我疯狂。

有谁知道为什么会这样?调试时我已经完成了两个步骤,但唯一的区别是一个有效,另一个没有。

提前致谢

deSex

编辑:

在这里,我渲染了一个名为&#34; content&#34;的部分,其中几乎所有内容都将被渲染。

    <div id="content">
     @RenderBody()
     @RenderSection("content", false)
    </div>

我的首页有一个ContentArea for blocks,在此部分中呈现:

@model Intranet.Models.ViewModels.StartPageViewModel
@section content{
   @if (User.Identity.IsAuthenticated)
   {
       <div class="contentArea">
           @Html.PropertyFor(x => x.MainContentArea)
       </div>
   }
}

这是继承自BlockController的控制器:

public class ProfileBlockController : BlockController<ProfileBlock>
{
    public override ActionResult Index(ProfileBlock currentBlock)
    {
        ProfileBlockViewModel model;
        if (currentBlock != null)
        {
            model = new ProfileBlockViewModel(currentBlock);
        }
        else
        {
            model = (ProfileBlockViewModel)Session["model"];
        }
        model.CurrentUser = ConnectionHelper.GetCurrentUserByEmail(User.Identity.Name);
        var availableStatuses = ConnectionHelper.GetAllOfficeStatuses();
        availableStatuses.Remove(model.CurrentUser.OfficeStatus);
        model.AvailableStatusChanges = availableStatuses;
        Session["model"] = model;

        return PartialView(model);
    }

}

1 个答案:

答案 0 :(得分:1)

currentPage ”路由值(即参数)将仅由EPiServer的页面路由设置。它在块控制器中始终为空。

但是,您可以在块控制器中获取当前请求的页面:

PageRouteHelper.Page

如果该块正在作为个人资料页面请求的一部分进行呈现,您将能够通过 PageRouteHelper 获取该个人资料页面。