我目前在使用以下代码片段方面遇到了一些问题,这些代码片段与我几乎完全相同,但表现不一样。
这些片段来自我正在处理的两个不同的项目,它们以相同的方式构建,但只有一个正常工作。
这些是我进入控制器的表格:
表单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);
}
}
答案 0 :(得分:1)
“ currentPage ”路由值(即参数)将仅由EPiServer的页面路由设置。它在块控制器中始终为空。
但是,您可以在块控制器中获取当前请求的页面:
PageRouteHelper.Page
如果该块正在作为个人资料页面请求的一部分进行呈现,您将能够通过 PageRouteHelper 获取该个人资料页面。