Как правильно использовать тернарный оператор (:?) в шаблоне Razor? ⇐ C#

Место общения программистов C#
Anonymous
Как правильно использовать тернарный оператор (:?) в шаблоне Razor?

Сообщение Anonymous »

Я создаю собственное мегаменю, которое будет использоваться на сайте Sitefinity. Я все еще изучаю C# и Razor, поэтому прошу прощения за любые ошибки в моих методах кода. Я использую начальную загрузку, чтобы выполнить большую часть тяжелой работы с CSS. В моем коде вы можете видеть, что я пытаюсь использовать тернарный оператор, чтобы проверить, есть ли в списке элементы для заполнения подменю. Если да, добавьте раскрывающийся список классов, если нет, добавьте пустое место или оставьте его пустым, чтобы класс не добавлялся. Я также использую тернарный оператор, чтобы проверить, выбрано ли мегаменю в задней части сайта. Что добавляет класс has-мегаменю. Я получаю следующую ошибку в браузере:

Код: Выделить всё

error CS0173: Type of conditional expression cannot be determined because there is no implicit conversion between 'System.Web.IHtmlString' and 'string'

Код: Выделить всё

@* code omitted... *@
[list]
@foreach (var item in Model.Items)
{
string linkClass = "nav-link";
string toggleAttribute = "";
string inlineEditingAttribute = "";

var navigateUrl = HyperLinkHelpers.GetDetailPageUrl(item, ViewBag.DetailsPageId, ViewBag.OpenInSamePage, Model.UrlKeyPrefix);
var subMenuItems = item.Fields.SubMenuItems as IEnumerable;
bool hasSubMenuItems = subMenuItems != null && subMenuItems.Any();
var relatedSubMenuItems = item.Fields.RelatedSubMenuItems as IEnumerable;
bool hasRelatedSubMenuItems = relatedSubMenuItems != null && relatedSubMenuItems.Any();
bool hasMegaMenu = hasSubMenuItems && subMenuItems.Any(subItem => subItem.MegaMenuSelection.ToHtmlString() ==  @Html.Raw("Yes"));

if (hasSubMenuItems)
{
linkClass += " dropdown-toggle";
toggleAttribute = "dropdown";
inlineEditingAttribute = Html.InlineEditingFieldAttributes("Title", "ShortText").ToHtmlString();
}

[*]    @(hasSubMenuItems ? "dropdown" : @Html.Raw(" "))
@(hasMegaMenu ? "has-megamenu" : @Html.Raw(" "))"
@Html.InlineEditingAttributes(Model.ProviderName, Model.ContentType.FullName, (Guid)item.Fields.Id)>

[url=@navigateUrl]
@item.Fields.Title
[/url]

@* code omitted... *@

}
[/list]
@* code omitted... *@
Мне надоели разные варианты этого кода. Я могу сделать так, чтобы отображались основные элементы навигации и раскрывающиеся списки. Но когда я добавляю код, чтобы проверить, есть ли у элемента навигации раскрывающийся список или мегаменю. Кажется, это достаточно просто понять. Но это меня растоптало.


Подробнее здесь: https://stackoverflow.com/questions/791 ... r-template

Вернуться в «C#»