2011-11-19 68 views
16

Tôi đang cố hiển thị một số hàng trong bảng. Tùy thuộc vào UserGroup, View sẽ hiển thị các đánh dấu khác nhau. Quản trị viên có thể xóa các hàng nhưng người kiểm duyệt chỉ có thể đánh dấu các hàng đó là có thể nhìn thấy hoặc ẩn.cách tạo câu lệnh if else trong Razor?

Làm cách nào để viết câu lệnh if thích hợp trong Razor?

Các trang được hiển thị một cách chính xác, nhưng tiêu đề trang là Parse Lỗi

Đây là mã của tôi:

@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> 
+0

Vì bạn nói trang được hiển thị chính xác, là câu hỏi về logic trong chế độ xem hoặc tiêu đề ** của trang? – JustinStolle

+0

Logic phải sai, vì nó đưa ra một tiêu đề lỗi? – Kenci

Trả lời

25

Tiêu đề có phân tích lỗi vì bạn đã không đặt tiêu đề:

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

bây giờ cho một tuyên bố khác, không sử dụng lại @ cú pháp:

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

Bạn đang kiểm tra một boolean, bạn chỉ cần một cái khác. Cũng cho else if, nó hoạt động tương tự.

Mã của bạn có thể được đơn giản hóa nhiều hơn bằng cách chỉ thực hiện:

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

Bởi vì bạn đang hiển thị cùng mã anyways, chỉ cần thay đổi các thuộc tính dựa trên một giá trị. Đối với tôi, điều này trở nên dễ đọc hơn.

3

Bạn chỉ cần sử dụng elsemà không prepending một @. Tuy nhiên, tôi không nghĩ đó là vấn đề với tiêu đề trang của bạn. Có lẽ bạn cần đặt thuộc tính ViewBag.Title? Trang bố trí của bạn có thể tùy thuộc vào trang được đặt.

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

Tiêu đề vấn đề:

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

Được rồi tôi đã sửa nó, nhưng tôi vẫn nhận được tiêu đề Lỗi Parse. Làm thế nào mà? – Kenci

+0

Bạn đã sửa 'ViewBag.Title'? Tôi có thể đã thêm rằng sau khi bạn nhìn thấy câu trả lời ban đầu của tôi. – tvanfosson

4

như câu hỏi là cho else if trong dao cạo, tôi sử dụng này cho SEO mục đích

theo quan điểm

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

} 

hy vọng giúp một ai đó.

Các vấn đề liên quan