使用剃须刀选择“umbraco项目”

时间:2013-09-02 09:01:06

标签: .net asp.net-mvc asp.net-mvc-3 razor umbraco

我想写一个剃刀宏 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和剃须刀的新手

3 个答案:

答案 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")