如何在usercontrol中查找当前模板ID和名称

时间:2012-03-16 10:46:31

标签: umbraco

要查找我们使用的当前节点,

Node currentNode = Node.GetCurrent();

string myValue = currentNode.GetProperty("productDetails").Value;

lblProductDetails.Text = myValue;

但我有一个场景,我必须根据模板传递属性,我有两个模板使用不同的文档类型,所以如果template1得到(Template1property1,......)同样如果Template2 get(Template2property1,......)。

是否有可能实现这样的目标,或者有更好的方法在单个用户控件中解决这个问题,

任何帮助或帮助将不胜感激,

由于

1 个答案:

答案 0 :(得分:4)

确实你可以,实际上有很多方法,但我会显示“我在我的宏”路径后面使用.Net用户控件。我将做一些假设以证明如何做,因为它们没有在你的问题中列出。

假设

Name (Alias) [Type]

Product (product) [Document Type]
  - Product Details (productDetails) [Property]
  - Product Template (productTemplate) [Default Template]

Event (event) [Document Type]
  - Event Details (eventDetails) [Property]
  - Event Template (eventTemplate) [Default Template]

如何

要做的是在用户控件上创建一个.Net属性,然后让模板决定要查找哪个Umbraco属性名称。这意味着你不必依赖一堆if语句。

1。编写用户控件(在Visual Studio中)并确保在代码中定义了属性,如下所示

    private string _detailsProperty;
    public string DetailsProperty
    {
        set { this._detailsProperty = value; }
    }

2。将您的用户控件上传到Web根目录中的/usercontrols/文件夹,并将您的DLL(如果已编译)上传到/bin/文件夹。

3。创建宏(在Umbraco中)并分配给您的用户控件。我们将宏命名为MyAbstractControl,然后从下拉列表中将.Net用户控件分配给它。然后单击“保存”(重要!)。

4。如果在上面的步骤中单击“保存”,则应显示“浏览属性”按钮。单击它,您将从用户控件中看到您的属性。确保选中该框,然后单击“保存属性”按钮。要检查是否已完成,请重新加载宏并转到“属性”选项卡,然后将用户控件的属性添加到列表中。

5。在模板中添加类似以下代码的内容,以查找不同的Umbraco属性别名。

    <!-- put in template : productTemplate -->
    <umbraco:Macro Alias="MyAbstractControl" DetailsProperty="productDetails" runat="server">

    <!-- put in template : eventTemplate -->
    <umbraco:Macro Alias="MyAbstractControl" DetailsProperty="eventDetails" runat="server">

6。然后,您可以对问题中的代码进行小的更新,使其符合以下内容,以使其按照需要运行

    if (!String.IsNullOrEmpty(this._detailsProperty))
    {
        Node currentNode = Node.GetCurrent();
        string myValue = currentNode.GetProperty(this._detailsProperty).Value;
        lblProductDetails.Text = myValue;
    }

希望有所帮助。