Umbraco Razor, сравнивая 2 набора идентификаторов страниц в строке для любых совпадений - PullRequest
0 голосов
/ 17 сентября 2018

изначально использовал .Contains (), когда мои 2 элемента сравнения были примерно такими: Is:

1234

In:

5555 6732 **1234** 3456

И в этом случае, да, это было,и код будет выполняться на if (), но когда я ввел несколько сравнений, например,

Is:

**1234** 2344 2341 3245

In:

5555 6732 **1234** 3456

Это нетбольше работает с .Contains (), поэтому я ищу, чтобы выяснить, как лучше сравнить 2 строки для любого соответствия, и если любой блок из четырех чисел в обеих строках, сделайте 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>

Но в итоге я беру идентификатор страницы и все родительские идентификаторы, превращаю их в строку, затем беру идентификатор местоположения объявления, превращаю их в строку, и я пытаюсь найти, существует ли один идентификатор вДругой.Я рад что-то переделать, но я новичок в этом, поэтому, пожалуйста, будьте терпеливы.; -)

Ура

1 Ответ

0 голосов
/ 18 сентября 2018

Добро пожаловать в StackOverflow:)

Если вы поместите свои строки в массив, вы можете запустить Contains на них.Поскольку вы знаете, что ваши записи всегда будут разделяться пробелом между ними, вы можете просто сделать следующее:

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

Для нескольких Contains вы можете сделать:

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