c# - 在 MVC 中,我如何使用 Controller 为已批准的用户呈现局部 View ?

标签 c# asp.net-mvc asp.net-mvc-5

在 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 名称的参数)

Refer documentation

关于c# - 在 MVC 中,我如何使用 Controller 为已批准的用户呈现局部 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30743482/

相关文章:

c# - 等效于 (VB6) IsMissing 在 C# 中?

c# - 我如何保证我的密码安全?

asp.net-mvc - 如何将模型绑定(bind)到 List<ViewModel>?

asp.net-mvc-5 - MVC 5 FileContentResult 操作结果权限和重定向

c# - 这种继承设计模式的名称是什么?

javascript - 单击文本字段时不出现日期选择器

c# - MVC 部分页面刷新

c# - Controller.User 由 ASP.NET MVC 5 上的 ASP.NET Identity 设置不一致

c# - ASP.NET MVC 5 错误处理

c# - 中继器链接按钮 Onclick 未触发