【问题标题】:Sending to different Pages depending on Web.config Razor根据 Web.config Razor 发送到不同的页面
【发布时间】:2015-09-21 17:41:02
【问题描述】:

所以我想要一个状态页面,它会根据使用它的人来显示不同的设备布局,这将是 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>
}

或者这是一个坏主意?

【问题讨论】:

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


    【解决方案1】:

    有多种选择,这完全取决于您的需求和偏好。

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

    一个重要的规则,永远不要相信最终用户!假设他们不会做你想让他们做的事情。

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

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

    【讨论】:

    • 如果不仅布局不同,而且信息必须以不同的方式排序,因为根据它是否是超级用户有不同的类型,这是否可行?
    • @roostersign “不同类型”是指他们有不同的模型吗?如果是这种情况,您将不得不在 Controller 中处理它。
    • 是的,布局不一样是因为传上去的模型不一样。
    • 在这种情况下,我建议在 Controller 中处理所有内容。在那里,您可以选择要生成的模型以及要在哪个视图上显示它。
    【解决方案2】:

    听起来像是视图问题。我将通过控制器中的依赖项传递配置数据并渲染部分:

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

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

    public ActionResult Index()
    {
        var vm = new MyViewModel();
        vm.IsSuperUser = _config.GetSuperUser();
        return View(vm);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-15
      • 1970-01-01
      • 2020-04-26
      • 2014-02-17
      • 2015-08-23
      • 2014-09-01
      相关资源
      最近更新 更多