Asp.net mvc Sitefinity-从MVC小部件中获取完整URL

Asp.net mvc Sitefinity-从MVC小部件中获取完整URL,asp.net-mvc,sitefinity,sitefinity-5,Asp.net Mvc,Sitefinity,Sitefinity 5,我正在尝试编写一个基本的MVC小部件,它将列出新闻条目,每个条目都有一个链接,但我一直在思考如何为每个新闻条目获取正确的URL。有人知道这是怎么做到的吗 我知道新闻条目不一定只有一个链接,所以我会根据新闻模块管理器查找与首选页面匹配的URL。在我的例子中,我指定了一个名为“news item”的页面作为默认页面,因此我的所有新闻URL前面都应该有“news item” 如何以编程方式构建此URL 我试图通过在默认页面节点上运行“GetFullUrl()”方法来获取完整URL,但我还没走到这一步就

我正在尝试编写一个基本的MVC小部件,它将列出新闻条目,每个条目都有一个链接,但我一直在思考如何为每个新闻条目获取正确的URL。有人知道这是怎么做到的吗

我知道新闻条目不一定只有一个链接,所以我会根据新闻模块管理器查找与首选页面匹配的URL。在我的例子中,我指定了一个名为“news item”的页面作为默认页面,因此我的所有新闻URL前面都应该有“news item”

如何以编程方式构建此URL

我试图通过在默认页面节点上运行“GetFullUrl()”方法来获取完整URL,但我还没走到这一步就被卡住了:

var newsItems = App.WorkWith().NewsItems().Get();
var defaultPage = newsItems.FirstOrDefault().DefaultPageId.Value;
当尝试获取默认页面的ID以便获取其相应的URL时,我立即遇到错误:

Nullable object must have a value.
>> var defaultPage = newsItems.FirstOrDefault().DefaultPageId.Value;

你知道这是怎么回事吗?我觉得DefaultPageId出于某种原因返回空值…

您可以像这样使用ContentLocationService:

var newsItems = App.WorkWith().NewsItems().Get();
var myNewsItem = newsItems.FirstOrDefault();

var contentLocationService = SystemManager.GetContentLocationService();
var contentLocation = contentLocationService.GetItemDefaultLocation(myNewsItem);
string defaultUrl = contentLocation == null ? "" : contentLocation.ItemAbsoluteUrl;

希望这能有所帮助。

这非常有效-我已经在我的G+帖子上回复了你的精彩答案,但再次感谢!