根据Web发送到不同的页面.配置剃须刀
本文关键字:配置 剃须刀 Web 根据 | 更新日期: 2023-09-27 18:13:43
所以我想有一个状态页面,将显示设备的不同布局取决于谁在使用它,这将是一个变量定义在web.config。我应该为每个视图创建一个单独的控制器吗?一些后台功能应该是相似的,但有些可能会在未来有所不同。或者我应该有相同的cshtml文件和隐藏html标记取决于谁在使用它或不?
我正在考虑这样做:
@if(System.Configuration.ConfigurationManager.AppSettings["IsSuperUser"] == "true")
{
<a href="@Url.Action("SuperUserIndex", "Status")">Status</a>
}
else {
<a href="@Url.Action("UserIndex", "Status")">Status</a>
}
还是说这是个坏主意?
有几个选项,这都取决于你的需要和偏好。
你的代码将工作,但是你还必须仔细检查你的控制器的权限!例如,您的url将是"/SuperUser/Status"answers"/User/Status"。现在,是什么阻止非超级用户在地址栏输入"/SuperUser/Status"?
一个重要的规则,永远不要相信最终用户!假设它们不会做你想让它们做的事。
考虑到这一切,我倾向于在你的模型中包含一个变量来标识用户级别(超级与非超级),然后用它来确定视图中的布局。请记住,您还可以根据变量/表达式更改视图的布局。
@Layout = Model.IsSuperUser ? "_SuperLayout.cshtml" : "_RegularLayout.cshtml";
听起来像是一个视图关注点。我将通过控制器中的依赖项传递配置数据并呈现部分:
@if (Model.IsSuperUser)
{
@Html.Partial("_SuperUser")
}
else
{
@Html.Partial("_User")
}
控制器可以这样做:
public ActionResult Index()
{
var vm = new MyViewModel();
vm.IsSuperUser = _config.GetSuperUser();
return View(vm);
}