4

我有一个自定义控制器来发送消息。所以我需要获取属性字段名称和别名=“电子邮件”的值,这将用于发送电子邮件。

下面的代码有效

 var id = umbraco.uQuery.GetNodeByUrl("/contact-us");
 IPublishedContent root = Umbraco.TypedContent(id.Id);
 return root.GetProperty("email", true).Value.ToString();

但是这里的问题是,如果页面名称更改,则 url 将更改并且代码将中断。

那么如何更改上面的代码以获取当前页面ID并将其插入此处(???);?

我认为代码应该是这样的:

 IPublishedContent root = Umbraco.TypedContent(???);
 return root.GetProperty("email", true).Value.ToString();

任何帮助将不胜感激

4

2 回答 2

10

如果您有超过 1 个“ContactUs”节点,或者没有,您的解决方案将带来问题。然后你不知道会得到哪一个。

(实际上它是在节点树中找到的第一个,但后来有人可以更改它们的顺序......)

你的控制器是 Surface 控制器吗?你可以这样做:

IPublishedContent currentNode = Umbraco.TypedContent(CurrentPage.Id)
于 2014-04-22T08:07:31.947 回答
2

好的,我找到了我的问题的解决方案。

var nodes = umbraco.uQuery.GetNodesByType("ContactUs");
if (nodes.Any())
{
   IPublishedContent node = Umbraco.TypedContent(nodes.First().Id);
   return node.GetProperty(property, true).Value.ToString();
}

希望这会帮助有同样问题的人。

于 2014-04-22T02:48:40.650 回答