首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >南希,TinyIoC -卡在盒子里

南希,TinyIoC -卡在盒子里
EN

Stack Overflow用户
提问于 2016-07-01 04:08:00
回答 2查看 174关注 0票数 2

我已经用了南希一段时间了,我想我已经把自己弄成了一个盒子,无法从它之外想出我在使用南希时所犯的错误。我看到的选择我不太喜欢。如果有一些功能我错过了,有人可以帮助我,或替代的方法,我没有列出任何帮助,将不胜感激。

问题设置

我正在创建一个小的web应用程序,在那里我有正常的固定装置。布局页面和内容页面,甚至几个部分的视图在周围浮动。

我想要创建一个动态菜单系统,它将根据登录的用户更改其菜单选项和总体布局。因此,以会计为主要工作的用户可能会看到更多的计费功能,日程安排的人可能会看到更多的调度功能,等等。

问题本身

问题是,我在使用获得一个动态菜单到Fire有困难。

最初我想,“我只是设置一个菜单模块,和RenderAction,或者类似的,我会做得很好”,除了南希不喜欢这样。没关系因为我的选择是..。在一个代码片段中,在布局页面上与TinyIoC对话,这将解决我的IMenuManager,我可以在那里使用传入的用户Id或什么东西调用它的GenerateMenu函数。我将把返回的对象传递给@Html.Partial('path',model),我是金色的

除了你真的不能用这种方式和TinyIoC说话。除非接口是Nancy本身的扩展,否则很难将接口解析为实现。

我考虑过的其他选择

  1. 我考虑过使用JavaScript / jQuery对MenuModule进行AJAX调用并以这种方式获取信息,但这感觉很脏,我不喜欢这样做。
  2. 我考虑过的另一个选项是用PageModel.MenuModel和PageModel.RealPageModel包装所有页面模型。这也让人觉得很脏,我也不是粉丝。

有没有其他的选择,我只是没有看到?我会放弃TinyIoC,重新实现整个过程吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-07-02 07:04:29

我想你可以采取两种方法中的一种,就像你提到的那样。

我倾向于使用前端框架来管理这类事情,对我来说,这要么是riot.js,要么是vue.js,但是不管您使用的是角度/反应等等,同样的事情都适用。

基本上,您将调用端点以返回json结果,这将查看用户并调用工厂根据用户信息获取菜单服务,然后菜单服务将负责创建结果菜单的模型。然后,客户端将根据响应构建自己的视图。

如果您使用每个请求按下菜单,您可以使用RenderPartial执行类似的操作,在模型中包含基于服务结果的菜单和MenuView的方法是相同的。

使用工厂,创建/解析正确的服务,生成菜单,将菜单与其他所有内容一起附加到响应模型,然后呈现您的部分:

@Html.Partial(Model.MenuView, Model.Menu)

我在我的一个个人项目中使用了这种方法。

如果你需要我进一步解释的话请告诉我。

票数 2
EN

Stack Overflow用户

发布于 2016-08-07 13:43:59

如果你的需求不太复杂,你可能会下意识地试图使事情复杂化。

你可以这样做,这是你的观点:

代码语言:javascript
复制
@if (Html.RenderContext.Context.CurrentUser.IsAuthenticated())
{
    if (Html.RenderContext.Context.CurrentUser.Claims.Contains("Admin"))
    {
        @Html.Partial("Views/Partials/_AdminMenu")
    }
    else if (Html.RenderContext.Context.CurrentUser.Claims.Contains("Editor"))
    {
        @Html.Partial("Views/Partials/_EditorMenu")
    }
    else if (@Html.RenderContext.Context.CurrentUser.Claims.Contains("Viewer"))
    {
        @Html.Partial("Views/Partials/_ViewerMenu")
    }
    else
    {
        @Html.Partial("Views/Partials/_PublicMenu")
    }
}
else
{
    @Html.Partial("Views/Partials/_PublicMenu")
}

当然,从后端发回菜单布局更优雅。你只会看到一个视图。这可能更容易实现。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38136893

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档