在 MVC 5 中,仅当(Windows 身份验证的)用户属于一个或多个 Active Directory 组列表时,我才尝试使用 Controller 呈现局部 View 。我需要考虑 30 多个不同的组,因此“hello world”示例不符合我的需要。在网络上玩寻宝游戏后,我设法收集了这么多。没有编译或运行时错误,但内容显示给所有用户而不是特定用户。所以还没有达到预期的结果。
虽然我可以在 View 中使用 if-then 逻辑实现预期的结果,但它会产生大量不必要的重复并鼓励面条化。所以我试图在 Controller 中执行此操作。
期望结果的总结:
当用户加载 View 页面时,仅当 Windows 身份验证用户属于 Controller 操作中定义的一组列表中的一个或多个组时,才应呈现局部 View 。如果用户未获得授权,则不包括部分 View 。
Controller block :
[ChildActionOnly]
[Authorize(Roles="Domain\\GroupA,Domain\\GroupB")]
public ActionResult MonitorCSU()
{
return PartialView("MonitorCSU");
}
查看 block :
<div class="rowWithCols3">
@Html.Partial("MonitorCSU")
不成功的迭代:
在 Controller block 中,我尝试(未成功)使用 if-then block ,否则情况是另一个没有内容的部分 View 。
[ChildActionOnly]
公共(public) ActionResult MonitorCSU() { 如果 (User.IsInRole("Domain\GroupA")) { 返回 PartialView("_MonitorCSU"); } 别的 { 返回 PartialView("_Unauthorized"); }在 Razor 中,我尝试使用 HTML.Action,但当我尝试运行该页面时,浏览器陷入无限循环。
最佳答案
@Html.Partial()
返回分部 View 而不调用 Controller 方法。为了调用你的 Controller 方法,你需要使用
@Html.Action("MonitorCSU")
或
@{ Html.RenderAction("MonitorCSU") }
请注意,这假定 MonitorCSU()
方法与生成主视图的方法位于同一 Controller 中(否则您还需要包含 Controller 名称的参数)
关于c# - 在 MVC 中,我如何使用 Controller 为已批准的用户呈现局部 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30743482/