как создать оператор else if в Razor? - PullRequest
16 голосов
/ 20 ноября 2011

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

Как написать правильное утверждение 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>

Ответы [ 3 ]

28 голосов
/ 20 ноября 2011

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

@{
    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" })

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

6 голосов
/ 10 мая 2015

так как вопрос для другого, если в бритве, я использовал это для целей 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";
    }

}

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

4 голосов
/ 20 ноября 2011

Вы просто используете 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...