Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用Sitefinity查询相关的动态内容模块_C#_Asp.net_Linq_Sitefinity - Fatal编程技术网

C# 使用Sitefinity查询相关的动态内容模块

C# 使用Sitefinity查询相关的动态内容模块,c#,asp.net,linq,sitefinity,C#,Asp.net,Linq,Sitefinity,我已经设置了两个动态内容模块,并在后端成功地将其中一个链接到另一个。我遇到的问题是,我试图从一个查询另一个的值。示例如下: 单元一: 业务区域->业务单元 单元二: 服务 因此,业务单元有一个与服务相关的Guid数组。我已经创建了一个小部件,您可以在其中单击服务,它将加载服务信息,但现在我想显示服务中的所有业务单元。我不得不这样做,因为我将显示一个区域中的所有单元,并且怀疑他们可能在多个服务区域中有一个单元,知道用户喜欢如何更改内容:) 那么,对于如何检索这些信息,有什么建议吗?我想从页面Gui

我已经设置了两个动态内容模块,并在后端成功地将其中一个链接到另一个。我遇到的问题是,我试图从一个查询另一个的值。示例如下:

单元一: 业务区域->业务单元

单元二: 服务

因此,业务单元有一个与服务相关的Guid数组。我已经创建了一个小部件,您可以在其中单击服务,它将加载服务信息,但现在我想显示服务中的所有业务单元。我不得不这样做,因为我将显示一个区域中的所有单元,并且怀疑他们可能在多个服务区域中有一个单元,知道用户喜欢如何更改内容:)

那么,对于如何检索这些信息,有什么建议吗?我想从页面Guid开始,但我真正想要的是传递到页面的服务的Guid,然后能够使用它运行Linq查询。到目前为止,我得到的错误是:

Database mapped field uses different type 'System.Guid[]'.
Parameter name: methodCallExpression
Actual value was re-d.FieldValue("Service").
这是由

var pManager = Telerik.Sitefinity.Modules.Pages.PageManager.GetManager();
Telerik.Sitefinity.Pages.Model.PageData page = pManager.GetPageData(new Guid(currentNode.Key));

if (page != null)
{
    var serviceGuid = new Guid(SiteMapBase.GetCurrentProvider().CurrentNode.Key);

    var list = new List<Guid>();
    list.Add(serviceGuid);
    Guid[] guidList = list.ToArray();

    DynamicModuleManager dynamicModuleManager = DynamicModuleManager.GetManager(providerName);
    Type serviceType = TypeResolutionService.ResolveType("Telerik.Sitefinity.DynamicTypes.Model.Services.Service");
    Type businessUnitType = TypeResolutionService.ResolveType("Telerik.Sitefinity.DynamicTypes.Model.BusinessAreas.BusinessUnit");

    myFilteredCollection = dynamicModuleManager.GetDataItems(businessUnitType)
                                               .Where(i => i.Status == Telerik.Sitefinity.GenericContent.Model.ContentLifecycleStatus.Live && i.Visible == true)
                                               .Where(d => d.GetValue<TrackedList<Guid>>("Service").Contains(guidList))
                                               .OrderBy(i => i.GetValue<System.Decimal>("SortOrder"));                
    }
var pManager=Telerik.Sitefinity.Modules.Pages.PageManager.GetManager();
Telerik.Sitefinity.Pages.Model.PageData page=pManager.GetPageData(新Guid(currentNode.Key));
如果(第页!=null)
{
var serviceGuid=新Guid(SiteMapBase.GetCurrentProvider().CurrentNode.Key);
var list=新列表();
list.Add(serviceGuid);
Guid[]guidList=list.ToArray();
DynamicModuleManager DynamicModuleManager=DynamicModuleManager.GetManager(providerName);
类型serviceType=TypeResolutionService.ResolveType(“Telerik.Sitefinity.DynamicTypes.Model.Services.Service”);
类型businessUnitType=TypeResolutionService.ResolveType(“Telerik.Sitefinity.DynamicTypes.Model.BusinessAreas.BusinessUnit”);
myFilteredCollection=dynamicModuleManager.GetDataItems(businessUnitType)
.Where(i=>i.Status==Telerik.Sitefinity.GenericContent.Model.ContentLifecycleStatus.Live&&i.Visible==true)
其中(d=>d.GetValue(“服务”).Contains(guidList))
.OrderBy(i=>i.GetValue(“排序器”);
}

我想知道我应该去哪里找。我觉得我已经达到了不断阅读相同的五篇文章和博客的目的

我在模块生成器中创建了一个业务区域模块,其中业务单元作为子类型。我还在模块生成器中创建了一个服务模块,并为其创建了一个动态项字段控制选择器。在业务单元模块上,我添加了一个Guid[]字段,并正在使用服务选择器来关联服务

我在Sitefinity中设置了两个页面,一个页面上有一个服务列表小部件,另一个页面上有一个服务详细信息小部件,列表指向详细信息页面。在servicesdetails小部件模板上,我包含了一个自定义控件,它使用下面的代码通过url名称查找服务,然后它查找业务单元并检查它们是否与服务关联

protected void Page_Load(object sender, EventArgs e)
{
    RouteHelper.SetUrlParametersResolved();

    string urlParams = this.GetUrlParameterString(true);

    if (!string.IsNullOrEmpty(urlParams))
    {
        urlParams = urlParams.Replace("/", string.Empty);


        var dynamicModuleManager = DynamicModuleManager.GetManager(string.Empty);
        var serviceType = TypeResolutionService.ResolveType("Telerik.Sitefinity.DynamicTypes.Model.Services.Service");
        var service = dynamicModuleManager.GetDataItems(serviceType).FirstOrDefault(s => s.Status == ContentLifecycleStatus.Live && s.UrlName == urlParams);

        if (service != null)
        {
            var businessUnits = GetBusinessUnits().Where(bu => bu.GetValue<Guid[]>("Services").Contains(service.OriginalContentId));

            foreach (var bu in businessUnits)
            {
                //do something cool
            }
        }
    }
}

public IQueryable<DynamicContent>GetBusinessUnits()
{
    var providerName = String.Empty;
    DynamicModuleManager dynamicModuleManager = DynamicModuleManager.GetManager(providerName);
    Type businessUnitType = TypeResolutionService.ResolveType("Telerik.Sitefinity.DynamicTypes.Model.BusinessAreas.BusinessUnit");

    var myCollection = dynamicModuleManager.GetDataItems(businessUnitType).Where(bu => bu.Status == ContentLifecycleStatus.Live);

    return myCollection;
}
受保护的无效页面加载(对象发送方,事件参数e)
{
RouteHelper.SetUrlParametersResolved();
string urlParams=this.GetUrlParameterString(true);
如果(!string.IsNullOrEmpty(urlParams))
{
urlParams=urlParams.Replace(“/”,string.Empty);
var dynamicModuleManager=dynamicModuleManager.GetManager(string.Empty);
var serviceType=TypeResolutionService.ResolveType(“Telerik.Sitefinity.DynamicTypes.Model.Services.Service”);
var service=dynamicModuleManager.GetDataItems(serviceType).FirstOrDefault(s=>s.Status==ContentLifecycleStatus.Live&&s.UrlName==urlParams);
if(服务!=null)
{
var businessUnits=GetBusinessUnits()。其中(bu=>bu.GetValue(“服务”)。包含(service.OriginalContentId));
foreach(业务单位中的var bu)
{
//做点酷的事
}
}
}
}
公共IQueryableGetBusinessUnits()
{
var providerName=String.Empty;
DynamicModuleManager DynamicModuleManager=DynamicModuleManager.GetManager(providerName);
类型businessUnitType=TypeResolutionService.ResolveType(“Telerik.Sitefinity.DynamicTypes.Model.BusinessAreas.BusinessUnit”);
var myCollection=dynamicModuleManager.GetDataItems(businessUnitType).Where(bu=>bu.Status==ContentLifecycleStatus.Live);
回采;
}

谢谢!我已经弄明白了,并计划今天发布,但你的比我现在拥有的更优雅!没问题,很乐意帮忙!