Umbraco Razor,比较字符串中的 2 组页面 ID 以查找任何匹配项

Umbraco Razor, comparing 2 sets of page ID's in a string for any matches

最初使用 .Contains() 时我的 2 个比较项目是这样的, 是:

1234

在:

5555 6732 **1234** 3456

在这种情况下,是的,代码会在 if() 上 运行,但是当我引入多重比较时,比如

是:

**1234** 2344 2341 3245

在:

5555 6732 **1234** 3456

它不再与 .Contains() 一起使用,所以我想找出如何最好地比较任何匹配的 2 个字符串,如果 any 四个数字块在两个字符串中都做 X.

数字块目前每个都在一个字符串中,例如 'placeIDs' 和 'adIDs',每个数字之间有空格。

这里是我的完整代码,如果你想看的话:

@inherits Umbraco.Web.Mvc.UmbracoTemplatePage
@using RJP.MultiUrlPicker.Models;
@{
string pagesID = "";
string adPlace = "";
var selection = Umbraco.TypedContent(1384).Children("headerAdvert").Where(x => x.IsVisible() && x.GetPropertyValue<bool>("active"));
    foreach(var item in Model.Content.Ancestors().OrderBy(x => x.Level))
        {
            pagesID = string.Concat(@item.Id.ToString(),"  ",pagesID);
        }
            pagesID = string.Concat(@Model.Content.Id.ToString(),"  ",pagesID);
            @:Page ID's @pagesID
     }

<div id="leaderboard" class="advert-carousel owl-carousel owl-theme" style="opacity: 1; display: block;">
    <div class="owl-wrapper-outer">
<div class="headerSlick owl-wrapper">
    @{
    foreach(var item in selection){
        var dateRange = item.GetPropertyValue<Diplo.DateRangePicker.DateRange>("campaignDate");
        <p>Your date range is from @dateRange.StartDate to @dateRange.EndDate</p>
        var typedMultiNodeTreePicker = item.GetPropertyValue<IEnumerable<IPublishedContent>>("location");
        foreach (var item2 in typedMultiNodeTreePicker)
            {
                adPlace = string.Concat(@item2.Id.ToString(),"  ",adPlace);
            }

        @:ad target ID's @adPlace
        if(item.HasValue("location") && pagesID.Contains(adPlace.ToString())){
        <script>alert("yes")</script>
        var singleLink = item.GetPropertyValue<Link>("links");
            if(singleLink != null)
            {
                if(item.HasValue("wideImage"))
                    {  
                    IPublishedContent mediaItem = item.GetPropertyValue<IPublishedContent>("wideImage");
                        <div class="owl-item" style="width: 891px;"><a href="@singleLink.Url" target="@singleLink.Target">
                            <img class="tag-headadvert img-responsive" style="display: inline;" src="@mediaItem.Url" width="100%" alt="@singleLink.Name" /></a>
                        </div> 
                    }
            }
        }

        else if (item.IsNull("location")){
        var singleLink = item.GetPropertyValue<Link>("links");
            if(singleLink != null)
            {
                if(item.HasValue("wideImage"))
                    {  
                    IPublishedContent mediaItem = item.GetPropertyValue<IPublishedContent>("wideImage");
                       <div class="owl-item" style="width: 891px;"><a href="@singleLink.Url" target="@singleLink.Target"><img class="img-responsive" src="@mediaItem.Url" width="100%" alt="@singleLink.Name" /></a></div> 
                    }
            }
        }
    }
}
</div>
</div>
</div>

但总而言之,我将页面的 ID 及其所有父 ID 制成一个字符串,然后将广告位置 ID 制成一个字符串,然后我试图找出一个 ID 是否存在于其他。我很乐意返工任何东西,但我是初学者所以请耐心等待。 ;-)

干杯

欢迎使用 Whosebug :)

如果将字符串放入数组中,则可以 运行 包含它们。 由于您知道您的条目之间总是会被 space 分隔,因此您可以简单地执行以下操作:

var allMyAdIds = "1234 2387 1931 2313 8237 2391 3911 2833 9741 1234";
var adIDs = allMyAdIds.Split(' ');
if (adIDs.Contains("1234"))
{
    // DO X
}

对于多个包含,你可以这样做:

var targetsToMatch = new[]{"1234", "7851", "9138"};
foreach (var item in targetsToMatch) {
    if (adIDs.Contains(item)) {
        // DO X
    }
}