我有一个_LayoutView:
@{
Layout = "~/Views/Shared/_NavLayout.cshtml";
}
@section styles
{
@RenderSection("styles", required: false)
}
<div class="container" style="padding-top: 60px;">
<div class="row">
<div class="col-md-12">
@Html.Action("AccountNavigation")
</div>
</div>
@RenderSection("InlineTitle", required:false)
@RenderBody()
</div>
@section scripts {
@Scripts.Render("~/bundles/jqueryval")
@RenderSection("scripts", required: false)
}
如果删除
,那就会很好 @Html.Action("AccountNavigation")
否则我得到:
行动方法是:
[ChildActionOnly]
public ActionResult AccountNavigation()
{
var roles = UserManager.GetRoles(User.Identity.GetUserId());
ViewBag.IsAdmin = roles.Contains("Admin");
return PartialView("_AccountNavigatorPartial");
}
我试图把它剥离回来:
[ChildActionOnly]
public ActionResult AccountNavigation()
{
ViewBag.IsAdmin = false;
return null;
}
但它没有任何区别。
使用该布局的其中一个子视图是Login。
[AllowAnonymous]
public ActionResult Login(string returnUrl)
{
ViewBag.OidLoginFailed = false;
ViewBag.ReturnUrl = returnUrl;
return View();
}
如果我在那里放置一个中断点,我可以看到每个请求被多次调用并构建ReturnUrl,直到它失败,因此出现错误信息。这就是我剥离AccountNavigation ActionMethod的原因。
我想也许是一个匿名请求通过一些配置设置导致回复,说明如果Anon重定向到登录并且四舍五入将会发生,但我无法看到它被触发的位置。
帐号_AccountNavigatorPartial只是:
<ul class="nav navbar-nav navbar-Left">
<li>@Html.ActionLink("Manage Credentials", "Credentials", "Account",
routeValues: null, htmlAttributes: new { id = "credentialsLink" })</li>
<li>@Html.ActionLink("Manage Profile", "Profile", "Account",
routeValues: null, htmlAttributes: new { id = "credentialsLink" })</li>
</ul>
所以我要做的就是为帐户导航注入一些HTML。我正在使用ASP.Identity作为成员资格但我无法看到这有什么不同,因为我正在请求匿名访问页面。
答案 0 :(得分:1)
如果没有看到控制器并知道如何处理授权,很难说,但是,由于您的登录页面正在使用该布局,您可能会因为您的子操作授权失败而遇到循环呼叫。
您是否尝试将属性[AllowAnonymous]
添加到您的子操作中?
答案 1 :(得分:0)
我们越来越相似UriFormatException: Invalid URI: The Uri string is too long.
-我们发现解决方案是将模型作为显式参数传入,而不仅仅是典型方法。
@Html.Action("MyChildAction", "Path", Model)
@Html.Action("MyChildAction", "Path", new { viewModel = Model} )
这似乎是通过使用非常大的视图模型触发的-必须包装它并绕过编码问题UriHelper.EscapeString
,该问题使缓冲区溢出。