Как создать инструкцию else if в Razor?

Я пытаюсь отобразить некоторые строки в таблице. В зависимости от UserGroup View должен показывать разную разметку. Администратор может удалять строки, но модератор может только отмечать их как видимые или невидимые.

Как написать правильную инструкцию if else в Razor?

Страница отображается правильно, но заголовок страницы Ошибка анализа

Это мой код:

@model MvcApplication3.Models.ViewModels.New.Question.MatrixRows

@{
    bool visible = Model.Visible;
}

<tr>
    <td>
    @if(visible) 
        {
        @Html.TextBoxFor(cn => Model.Row_Number, new { @class = "row required digits", size = 1 })
        }
    @if (!visible)
        {
        @Html.TextBoxFor(cn => Model.Row_Number, new { @class = "row required digits", size = 1, disabled = "disabled" })
        }
    </td>
    <td>
    @if(visible) 
        {
            @Html.TextBoxFor(bs => Model.Row_Description, new { @class = "rowdesc", size = 45 })
        }
    @if (!visible)
    {
        @Html.TextBoxFor(bs => Model.Row_Description, new { @class = "rowdesc", size = 45, disabled = "disabled" })
    }
    </td>
    <td>
        @if (HttpContext.Current.User.IsInRole("Administrator"))
        {
            @Html.HiddenFor(x => x.Delete, new { @class = "mark-for-delete" })
            @Html.LinkToRemoveNestedForm("Slet", "tr", "input.mark-for-delete")    
        }
        @if (HttpContext.Current.User.IsInRole("Moderator"))
        {
            @Html.HiddenFor(x => x.Visible, new { @class = "mark-for-visible" })
            @Html.LinkToDisableNestedForm("Deaktiver", "tr", "input.mark-for-visible")    
        }
        @Html.HiddenFor(id => Model.Row_Id)
    </td>
</tr>

Ответ 1

Заголовок имеет ошибку синтаксического анализа, потому что вы не указали название:

@{
    ViewBag.Title = "Home Page";
}

теперь для оператора else, не используйте синтаксис @:

@if(visible) 
{
    Html.TextBoxFor(bs => Model.Row_Description, new { @class = "rowdesc", size = 45 })
}
else
{
    Html.TextBoxFor(bs => Model.Row_Description, new { @class = "rowdesc", size = 45, disabled = "disabled" })
}

Вы проверяете логическое значение, вам просто нужно другое. Также для else if он работает одинаково.

Ваш код можно было бы упростить, просто сделав:

@Html.TextBoxFor(bs => Model.Row_Description, new { @class = "rowdesc", size = 45, disabled = visible ? "" : "disabled" })

Потому что вы все равно показываете один и тот же код, просто изменяя атрибут на основе значения. Для меня это становится более читаемым.

Ответ 2

поскольку вопрос выполняется иначе, если в бритве я использовал это для цели SEO

в поле зрения

@{
    if (ViewBag.Option == "Mobiles")
{
    ViewBag.Title = "Mobiles";
    ViewBag.Description = "Mobiles";
    ViewBag.Keywords = "Mobiles";

}

   else if (ViewBag.Option == "holiday")
{
    ViewBag.Title = "holiday";
    ViewBag.Description = "holiday.";
    ViewBag.Keywords = "holiday";
}


else
    {
        ViewBag.Title = "home";
        ViewBag.Description = "home";
        ViewBag.Keywords = "home";
    }

}

Надежда помогает кому-то.

Ответ 3

Вы просто используете else без, добавляя @. Однако я не думаю, что это проблема с названием вашей страницы. Возможно, вам нужно установить свойство ViewBag.Title? Ваша страница макета может зависеть от установленной.

@if(visible) 
    {
    @Html.TextBoxFor(cn => Model.Row_Number, new { @class = "row required digits", size = 1 })
    }
else
    {
    @Html.TextBoxFor(cn => Model.Row_Number, new { @class = "row required digits", size = 1, disabled = "disabled" })
    }

Заголовок вопроса:

@{
    bool visible = Model.Visible;
    ViewBag.Title = "My Title;
}