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