根据Web.config Razor发送到不同的页面

时间:2015-09-21 17:41:02

标签: c# .net asp.net-mvc razor

所以我希望有一个状态页面,它将显示设备的不同布局,具体取决于谁使用它,这将是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>
}

或者这是个坏主意?

2 个答案:

答案 0 :(得分:2)

有几种选择,一切都取决于您的需求和偏好。

您的代码可以使用,但是您还必须仔细检查控制器中的权限!例如,您的网址为“/ SuperUser / Status”和“/ User / Status”。现在,什么阻止非超级用户在地址栏中键入“/ SuperUser / Status”?

一个重要的规则,绝不信任最终用户!假设他们不会按照您的意图去做。

总而言之,我的偏好是在模型中包含一个变量来识别用户级别(超级与非超级),然后使用它来确定视图中的布局。请记住,您还可以根据变量/表达式更改视图的布局。

@Layout = Model.IsSuperUser ? "_SuperLayout.cshtml" : "_RegularLayout.cshtml";

答案 1 :(得分:0)

听起来像一个观点问题。我会通过控制器中的依赖项传递配置数据并渲染部分:

NSExceptionDomains

然后控制器可以执行以下操作:

@if (Model.IsSuperUser)
{
    @Html.Partial("_SuperUser")
}
else
{
    @Html.Partial("_User")
}