在视图中使用自定义属性

时间:2014-05-27 15:24:52

标签: asp.net-mvc custom-attributes asp.net-mvc-views

我习惯于创建自定义属性,以防止不同的访问级别到达控制器中的某些方法:

[AuthorizeUser(AccessLevel = "Administrator")]
public ActionResult Index()
{
    return View("Index");
}

但现在我想在视图中使用相同的自定义属性 。例如,当您是管理员时,目标是显示一些HTML。

听起来很奇怪,但我一无所获。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

我不确定这是否正确,但这可行。

<强>解决方法1

您可以在模型中使用boolean来检查用户是否处于某个角色,然后根据该模型创建视图 例如。

public class MyViewWithCustomAuthentication
{
  ....
  public bool IsAdmin{get;set;}
  ...
}

在您的控制器中,您可以检查用户是否处于某个角色

public ActionResult Index()
{
    var myView = new MyViewWithCustomAuthentication();
    myview.IsAdmin = false;
    if(User.IsInRole("Admin"))
    {
       myView.IsAdmin = true;
    }

    return View(myView);
}

然后在视野中

@model MyViewWithCustomAuthentication
....
@if(Model.IsAdmin == true)
{
  //show HTML
}
else
{
  //hide HTML
}
....

在这里您将拥有一个视图,但您可能需要对我的视图模型进行一些小改动。

解决方案2

另一种方法可以是检查用户是否处于某个角色,并根据需求为不同的角色创建不同的视图。通过这种方式,您可以显示所需的HTML,但最终会得到不同的视图。

public ActionResult Index()
{       
    if(User.IsInRole("Admin"))
    {
       return View("ViewForAdmin")
    }

    return View("ViewForNonAdmin");
}

如果有人有任何建议,请随时编辑或评论。

答案 1 :(得分:0)

您应该能够使用部分视图和RenderAction

[ChildActionOnly]
[AuthorizeUser(AccessLevel = "Administrator")]
public ActionResult AdminPartial() {
  return PartialView();
}

在视图中,您需要该管理HTML代码段。

@{Html.RenderAction("AdminPartial");}