2

我目前正在使用 razor 在 DotNetNuke 中渲染一些视图,除了我缺少的一件事之外,一切都运行良好。我正在尝试访问某些模块级别的方法,例如 EditUrl 等,但似乎无法弄清楚如何去做。

这就是我的观点,尽管它在 EditUrl 上出错。我正在使用 RazorEngine.Render 来渲染视图。有一些帮助程序包含基本 DNN 信息,但我似乎找不到 NavigateUrl 或 EditUrl 之类的东西。

有任何想法吗?

@inherits DotNetNuke.Web.Razor.DotNetNukeWebPage<dynamic>

<div id="items-panel">
    <table>
        <thead>
            <tr>
                <th>Title</th>
            </tr>
        </thead>
        <tbody>
            @foreach (var item in Model.Items)
            {
            <tr>
                <td>
                   <a href="@EditUrl("ItemId", item.ItemId, "ViewItem">@item.Title</a>
                </td>
            </tr>
            }
        </tbody>
    </table>
</div>
4

1 回答 1

2

通过在下面显示的剃刀视图中创建一个辅助方法,我找到了一种似乎适用于 EditUrl 的方法。很遗憾我必须这样做,因为 ModuleInstanceContext 实际上被传递到 RazorEngine 的构造函数中,但没有暴露给视图。如果其他人找到解决此问题的方法,我将不胜感激。

@helper EditUrl(string keyName, string keyValue, string controlKey)
{
    @DotNetNuke.Common.Globals.NavigateURL(Dnn.Tab.TabID, controlKey, "mid="+Dnn.Module.ModuleID, keyName + "=" + keyValue)
}

编辑:以下方法对我也很有效。我向名为 ItemViewUrl 的模型添加了一个属性,其中包含 ItemId 的占位符标记,然后只是在视图中进行了替换。

在调用页面:

dynamic model = new ExpandoObject();
model.Items = ItemRepository.List();
model.ViewItemUrl = EditUrl("ItemId", "[ITEMID]", "ViewItem");

然后在 Razor 视图中:

<td><a href="@Model.ViewItemUrl.Replace("[ITEMID]",item.ItemId.ToString())">@item.Title</a></td>
于 2013-09-04T14:28:37.460 回答