Просмотров:Домашняя страница "подразделом" Views на основе роли пользователя
Project \ Views \
Project \ Области \ User \ Вид \ Панель управления \ Supervisor.cshtml
Project Home \ Index.cshtml \ Области \ User \ Вид \ Панель управления \ Worker.cshtml
Контроллеры:
Project \ Controller \ 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», «Home»);} в теге #target на странице Index.cshtml, но получить «Ошибка выполнения дочернего запроса для обработчика» System.Web.Mvc .HttpHandlerUtil + ServerExecuteHttpHandlerAsyncWrapper «.
Я довольно новичок в mvc и задаюсь вопросом, есть ли лучший способ добиться этого в MVC.
Поместите контрольную точку в метод 'UserDashboard' и посмотрите, какая часть вашего метода сбой. – Shyju
@Shyju Он рушился на утверждение 'return'. Оказывается, я ссылался на неправильный путь для файлов вида. Я все еще ищу способы ссылки на представления через код и не должен использовать жесткий кодированный путь. – wombatatat