32

I am trying to display some rows in a table. Depending on the UserGroup, the View should show different markup. An administrator can delete rows, but a moderator can only mark them as visible or invisible.

How do i write a proper if else statement in Razor?

The page is displayed correctly, but the page title is Parse Error

This is my code:

@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>
2
  • Since you say the page is displayed correctly, is the question about the logic within the view or the title of the page? Commented Nov 19, 2011 at 22:07
  • The logic must be wrong, since it gives an error title? Commented Nov 19, 2011 at 22:07

3 Answers 3

51

The title has parse error because you did not set a title:

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

now for an else statement, don't use back the @ syntax:

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

You are checking for a boolean, you just need an else. Also for else if, it works the same.

Your code could be simplified even more by just doing:

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

Because you are displaying the same code anyways, just changing the attribute based on a value. To me, this becomes more readable.

Sign up to request clarification or add additional context in comments.

Comments

17

As the question is for else if in Razor page, For example, I used below for some SEO purpose.

In view

@{

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 if (ViewBag.Option == "Laptops")
{
    ViewBag.Title = "Laptops";
    ViewBag.Description = "Laptops.";
    ViewBag.Keywords = "Laptops";
}
else
{
    ViewBag.Title = "home";
    ViewBag.Description = "home";
    ViewBag.Keywords = "home";
}

}

Hope helps someone.

Comments

8

You just use else without prepending an @. However, I don't think that is the problem with your page title. Perhaps you need to set the ViewBag.Title property? Your layout page may be depending on it being set.

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

Title issue:

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

2 Comments

Okay i corrected it, but i am still getting the Parse Error title. Howcome?
You corrected the ViewBag.Title? I may have added that after you saw my original answer.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.