首页基于用户角色
视图 “子” 浏览:首页基于用户角色
项目\浏览\首页\ Index.cshtml
项目\地区\用户\查看\仪表板\ Supervisor.cshtml
项目\区\用户\查看\仪表板\ Worker.cshtml
控制器:
项目\控制器\ HomeController.cs
当索引页面加载时,我想调用HomeContoller中的一个动作来检测用户的角色并在索引页面内传递相应的视图。
Index.cshtml有这种通用设计:
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<div class="everybodySees">
<!-- some interesting stuff-->
</div>
<div id="target">
<!-- some stuff based on user roles -->
</div>
</body>
</html>
HomeController.cs
namespace MyApp.Controllers
{
public class HomeController : ControllerBase
{
public ActionResult Index()
{
return View();
}
public ActionResult About()
{
ViewBag.Message = "Your app description page.";
return View();
}
public ActionResult Contact()
{
ViewBag.Message = "Your contact page.";
return View();
}
public ActionResult UserDashboard([DataSourceRequest] DataSourceRequest request)
{
ViewResult view;
var emp = CommonInterfaces.Globals.UserDataSource.GetCurrentUser().GetRole();
else if (emp == CommonInterfaces.Globals.Roles.Supervisor)
{
view = View("../Dashboard/Supervisor");
}
else
{
view = View("../Dashboard/Worker");
}
return view;
}
}
}
Supervisor.cshtml
@model MyApp.Users.DashboardEmployeeWorkloadInfo
<div class="row-fluid">
<div class="span12">
@(Html.Kendo().Chart<MyApp.Users.DashboardUnitWorkloadInfo>().Name("TestChart")
.DataSource(d => d.Read(r => r.Action("TestChart", "Dashboard")))
.Legend(legend => legend.Position(ChartLegendPosition.Bottom))
.Series(series =>
{
series.Column(model => model.EmpName).Name("Workers in my Unit");
})
.ValueAxis(axis => axis.Numeric()
.MajorUnit(1)
.Line(line => line.Visible(false)))
)
</div>
</div>
Worker.cshtml
<article>
<p>
Area is static for now.
</p>
</article>
我使用@ {Html.RenderAction(“UserDashboard”,“家”);}试图在Index.cshtml页的#target标签内,但得到“错误执行的处理子请求“System.Web.Mvc .HttpHandlerUtil + ServerExecuteHttpHandlerAsyncWrapper”。”
我很新的MVC和不知道是否有更好的方法在MVC做到这一点。
如果你能得到用户的当前角色到视图模型,那么你很可能做到这一点的Index.cshtml
@if(Model.Emp == CommonInterfaces.Globals.Roles.Supervisor)
{
<div id="target">
<!-- some stuff based on user roles -->
</div>
}
else {
<div class="everybodySees">
<!-- some interesting stuff-->
</div>
}
这是假设,认为部分是排他性的,即用户将看到任何一个意见。如果这个想法是,用户应该首先看到的共同的东西,然后只细节,那么你可以做这样的事情,以及
<div class="everybodySees">
<!-- some interesting stuff-->
</div>
@if(Model.Emp == CommonInterfaces.Globals.Roles.Supervisor)
{
<div id="target">
<!-- some stuff based on user roles -->
</div>
}
此外,如果你是从DIV目标传承的价值观局部视图,然后你还需要携带到主视图模型,然后通过它进一步下降
我试图避免在视图中放置那么多逻辑。我希望在控制器中进行角色检查,这样我就可以将事情分割开来。我发现我的问题,但显然我错误的路径传递给控制器中的View()方法。我应该使用“〜/ Areas/User/View/Dashboard/Supervisor.cshtml”。我希望有一种方法可以用代码而不是字符串引用视图。我确信那里有东西 – wombatatat
放入'UserDashboard'方法中设置断点,看看哪些你的方法的一部分崩溃。 – Shyju
@Shyju它在'return'语句中崩溃。原来我引用了视图文件的错误路径。我仍然在寻找通过代码引用视图的方法,而不必使用硬编码路径。 – wombatatat