Strange behavior of display options without a tag

Vote:
 

Hi,

It seems like the default behavior is to use the display option's name for selecting the template tag or TemplateModel if the tag is not set. This is a problem if we want to pass in a tag to use and an editor has chosen a display option. E.g.:

@Html.PropertyFor(x => x.CurrentPage.RelatedNewsArticles, new { Tag = "UseThisTag" })

Will not use "UseThisTag" when selecting template if the editor selects a display option, even though that option doesn't have a tag specified.

Now I've solved this by having my own ContentAreaRenderer and overriding GetContentAreaItemTemplateTag like this:

/// 
///     Overridden so we can use the tag even though a display option is selected
///     and that display option's tag is not set.
/// 
/// The html helper.
///  The content area item.
/// The template tag for the content area item.
protected override string GetContentAreaItemTemplateTag(HtmlHelper htmlHelper, ContentAreaItem contentAreaItem)
{
    var tag = htmlHelper.ViewData.GetRenderSettings("Tag");

    if (string.IsNullOrEmpty(tag))
    {
        return base.GetContentAreaItemTemplateTag(htmlHelper, contentAreaItem);
    }

    var displayOption = contentAreaItem.LoadDisplayOption();

    if (displayOption != null && string.IsNullOrEmpty(displayOption.Tag))
    {
        return tag;
    }

    return base.GetContentAreaItemTemplateTag(htmlHelper, contentAreaItem);
}

I find this behavior a bit strange and think the default implementation should be changed.

#171244
Nov 03, 2016 15:34
Vote:
 

oh, yeah! :)

I had to do the same stuff in my bootstrap renderer. I had even more complex case - I had to capture tag to make proper decision about which template to choose and maybe which display option to choose, if developer has set it via attributes.

Funny part is that, tag is available in Render() method, but not in RenderContentAreaItems() anymore - as it's overwitten by display option.

#171650
Nov 14, 2016 15:47
Vote:
 

Thanks for this thread/help - I find it very odd the implementation of RenderContentAreaItems overrides the tag with the display option tag.... I'd expect them to be mutually exclusive.

#176411
Edited, Mar 17, 2017 21:18
Vote:
 

At least it shouldn't be overwritten with the display option's name when the display option doesn't have a tag specified at all.

I guess one could argue which tag should be more exclusive, the attribute or the display option, but my main concern is the above.

#176468
Mar 20, 2017 9:26
* You are NOT allowed to include any hyperlinks in the post because your account hasn't associated to your company. User profile should be updated.