我已经用了南希一段时间了,我想我已经把自己弄成了一个盒子,无法从它之外想出我在使用南希时所犯的错误。我看到的选择我不太喜欢。如果有一些功能我错过了,有人可以帮助我,或替代的方法,我没有列出任何帮助,将不胜感激。
问题设置
我正在创建一个小的web应用程序,在那里我有正常的固定装置。布局页面和内容页面,甚至几个部分的视图在周围浮动。
我想要创建一个动态菜单系统,它将根据登录的用户更改其菜单选项和总体布局。因此,以会计为主要工作的用户可能会看到更多的计费功能,日程安排的人可能会看到更多的调度功能,等等。
问题本身
问题是,我在使用获得一个动态菜单到Fire有困难。
最初我想,“我只是设置一个菜单模块,和RenderAction,或者类似的,我会做得很好”,除了南希不喜欢这样。没关系因为我的选择是..。在一个代码片段中,在布局页面上与TinyIoC对话,这将解决我的IMenuManager,我可以在那里使用传入的用户Id或什么东西调用它的GenerateMenu函数。我将把返回的对象传递给@Html.Partial('path',model),我是金色的
除了你真的不能用这种方式和TinyIoC说话。除非接口是Nancy本身的扩展,否则很难将接口解析为实现。
我考虑过的其他选择
有没有其他的选择,我只是没有看到?我会放弃TinyIoC,重新实现整个过程吗?
发布于 2016-07-02 07:04:29
我想你可以采取两种方法中的一种,就像你提到的那样。
我倾向于使用前端框架来管理这类事情,对我来说,这要么是riot.js,要么是vue.js,但是不管您使用的是角度/反应等等,同样的事情都适用。
基本上,您将调用端点以返回json结果,这将查看用户并调用工厂根据用户信息获取菜单服务,然后菜单服务将负责创建结果菜单的模型。然后,客户端将根据响应构建自己的视图。
如果您使用每个请求按下菜单,您可以使用RenderPartial执行类似的操作,在模型中包含基于服务结果的菜单和MenuView的方法是相同的。
使用工厂,创建/解析正确的服务,生成菜单,将菜单与其他所有内容一起附加到响应模型,然后呈现您的部分:
@Html.Partial(Model.MenuView, Model.Menu)
我在我的一个个人项目中使用了这种方法。
如果你需要我进一步解释的话请告诉我。
发布于 2016-08-07 13:43:59
如果你的需求不太复杂,你可能会下意识地试图使事情复杂化。
你可以这样做,这是你的观点:
@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")
}当然,从后端发回菜单布局更优雅。你只会看到一个视图。这可能更容易实现。
https://stackoverflow.com/questions/38136893
复制相似问题