要查找我们使用的当前节点,
Node currentNode = Node.GetCurrent();
string myValue = currentNode.GetProperty("productDetails").Value;
lblProductDetails.Text = myValue;
但我有一个场景,我必须根据模板传递属性,我有两个模板使用不同的文档类型,所以如果template1得到(Template1property1,......)同样如果Template2 get(Template2property1,......)。
是否有可能实现这样的目标,或者有更好的方法在单个用户控件中解决这个问题,
任何帮助或帮助将不胜感激,
由于
答案 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;
}
希望有所帮助。