根据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>
}

还是说这是个坏主意?

根据Web发送到不同的页面.配置剃须刀

有几个选项,这都取决于你的需要和偏好。

你的代码将工作,但是你还必须仔细检查你的控制器的权限!例如,您的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);
}