我习惯于创建自定义属性,以防止不同的访问级别到达控制器中的某些方法:
[AuthorizeUser(AccessLevel = "Administrator")]
public ActionResult Index()
{
return View("Index");
}
但现在我想在视图中使用相同的自定义属性 。例如,当您是管理员时,目标是显示一些HTML。
听起来很奇怪,但我一无所获。任何帮助将不胜感激。
答案 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");}