我使用MVC(基于nuget的Christoc.com DNN 8 MVC模块模板)创建了一个简单的DNN模块,带有自定义ControlKey。此自定义ControlKey的目的是调用特定的MVC操作。对于这个例子,我将这个ControlKey称为“DoIt”。
因此,我在.dnn文件中定义了ControlKey:
<moduleControl>
<controlKey>DoIt</controlKey>
<controlSrc>MyApp.Modules.TestModule.Controllers/DoIt/DoIt.mvc</controlSrc>
<supportsPartialRendering>False</supportsPartialRendering>
<controlTitle>DoIt</controlTitle>
<controlType>View</controlType>
<iconFile />
<helpUrl />
<viewOrder>0</viewOrder>
<supportsPopUps>True</supportsPopUps>
</moduleControl>
模块视图仅包含指向自定义ControlKey的链接,使用NavigateURL格式化,如下所示:
http://dnndev.me/TestPage/tabid/89/ctl/DoIt//mid/450/Default.aspx
以超级用户帐户登录时,此链接可以正常执行DoIt操作。 但是,当以非超级用户帐户登录时,即使是管理员,我也会收到“拒绝访问”消息。
我已经尝试调整模块和页面权限(从页面继承,或者在模块本身继承),但我无法使用非超级用户帐户。
我缺少什么?我是否需要在某处设置此自定义ControlKey的权限? 有没有办法找出缺少的权限?
答案 0 :(得分:1)
我将假设你的默认视图有效,你有一个MVC控制器(DnnController)名称DoItController,其中包含一个名为DoIt()的动作方法,以及一个名为Index()(或类似的东西)的默认视图动作。
尝试使用MVC Url帮助程序从默认视图(Index.cshtml)链接到DoIt操作。
<a href="@Url.Action("DoIt", "DoIt", new {ctl = "DoIt", itemId = item.ItemId})">Do It!</a>
Url.Action作为参数:
渲染的href如下所示:
http://801.dnndev.me/TestPage/ctl/DoIt/mid/437/controller/DoIt/action/DoIt