从剃刀视图访问页面或模块级功能

时间:2013-09-04 12:58:44

标签: razor dotnetnuke dotnetnuke-module

我目前正在使用剃须刀在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>

1 个答案:

答案 0 :(得分: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>