我想写一个剃刀宏 MySelectMacro ,用于选择要呈现的 umbraco:item 。
这个案例的简单结构是两页 -MasterPage和TextPage - TextPage包含两个类型为富文本编辑器 -field_1和field_2 -
的字段这是我尝试的不起作用,
以下是 TextPage 模板:
<asp:Content ContentPlaceHolderId="MainPageContent" runat="server">
<umbraco:Macro Alias="MySelectMacro" runat="server" />
</asp:Content>
这是宏 MySelectMacro :
@if (condition)
{
<umbraco:Item field="field_1" runat="server" />
}
else
{
<umbraco:Item field="field_2" runat="server" />
}
nb:我是umbraco和剃须刀的新手
答案 0 :(得分:3)
您不能在剃刀模板中使用服务器标签。标签如:
<umbraco:Item field="field_1" runat="server" />
但你可以打电话
@Model.field_1
最终版本应该是这样的:
@if (condition)
{
@Model.field_1
}
else
{
@Model.field_2
}
在umbraco上查看关于razor宏的帖子:http://www.diplo.co.uk/blog/2011/6/17/using-razor-in-umbraco-47.aspx
答案 1 :(得分:0)
我只是偶然发现了这个答案以及其他像我这样的人:在2015年及以后,它不是@Model.field
而是@Dictionary["field"]
。
这里解释了:
https://our.umbraco.org/documentation/reference/templating/macros/razor/using-dictionary-items
无论如何,通过配额和括号包含您的字段名称不会干扰ASP脚本的其余部分,即使它包含特殊字符。
答案 2 :(得分:0)
您无法混合WebForm和Razor语法!
新Razor语法中的旧umbraco:项的等效项将是:
template<typename T, int N>
void Bag<T,N>::add(T item)
{
for (int i = 0; i < m_size; i++)
{
if (m_items[i] == item)
{
m_counts[i]++;
while (i != 0 && m_counts[i] > m_counts[i-1]) {
replace(m_items[i], m_items[i-1]);
replace(m_counts[i], m_counts[i-1]);
i--;
}
return;
}
}
m_items [m_size] = item;
m_counts[m_size] = 1;
m_size++;
}
您还可以传递各种参数,包括条段段标记标记:
@Umbraco.Field("field_1")