2013-05-17 25 views
12

Nếu tôi có một trang với:Có thể tạo phần Razor tùy chọn không?

<body> 
    @section SomeStuff { 
     <span>This is a section I just addered</span> 
    } 

</body> 

Có thể cho thêm vào layout để không làm cho phần này, hoặc là trái với cách này nên làm việc về mặt khái niệm. Có vẻ như nó sẽ hữu ích để có thể không hiển thị các phần nhất định trên một trang (trừ khi tôi đang suy nghĩ về điều này không chính xác).

Edit:

Bao gồm các thông báo lỗi có thể hữu ích, khi tôi đặt một phần vào chính trang, trang bố trí không thành công với: The following sections have been defined but have not been rendered for the layout page "/Views/Layouts/_Layout1.cshtml": "SomeStuff". Như thể nó buộc tôi phải làm cho mỗi phần trên trang hoặc một cái gì đó.

Trong các từ khác, trong Layout.cshtml, I không gọi @RenderSection, nhưng trong Index.html tôi có một phần được gọi là SomeStuff được xác định. Điều đó có hợp pháp không? Có vẻ như nó buộc tôi phải hiển thị tất cả các phần trong trang, nhưng điều đó có vẻ như các phần nên là tùy chọn, phải không?

+1

Ý bạn là câu lệnh 'if'? – musefan

+1

Tôi cũng thích những thứ gây nghiện quá –

+0

@daveL - những tư duy tuyệt vời nghĩ như nhau. – sircodesalot

Trả lời

22

bạn có thể xác định nếu một phần là bắt buộc.

@RenderSection("SomeStuff", required: false) 

nếu bạn không làm cho nó ra trong một cái nhìn, nó không nên lỗi sau đó, lưu ý đây

http://weblogs.asp.net/scottgu/archive/2010/12/30/asp-net-mvc-3-layouts-and-sections-with-razor.aspx

+0

Làm thế nào điều này có thể là câu trả lời được chấp nhận? Nó đề cập đến một câu hỏi khác!Đó là cách khác xung quanh: Tôi xác định một phần trong khung nhìn, sau đó tôi không sử dụng nó trong bố cục - tôi có thể làm điều này không? – Simone

+0

@Simone: http://stackoverflow.com/a/8041081/70345 –

0

Bạn có thể làm:

@if (condition) { 
    @RenderSection("SomeStuff") 
    } 

Hoặc chỉ cần sử dụng một conditional statement trực tiếp chứ không phải là @RenderSection:

@if (yourCondition) { 
    <span>This is a section I just addered</span> 
} 
+0

Có thể tôi đang làm điều gì sai, nhưng khi tôi đặt phần đó vào trang * chính *, trang * bố cục không thành công bởi vì nó không gọi '@RenderSection (" SomeStuff ")'. Dường như việc hiển thị các phần phải là tùy chọn, nhưng nó không hoạt động giống như nó. – sircodesalot

+0

Tôi nhận được 'Các phần sau đã được xác định nhưng chưa được hiển thị cho trang bố cục" /Views/Layouts/_Layout1.cshtml ":" SomeStuff ".' Có vẻ như nó buộc tôi phải hiển thị phần đó. – sircodesalot

+0

@sircodesalot - Tôi tin rằng bố cục muốn bạn bao gồm @RenderSection ("SomeStuff") ... bạn có thể đặt điều kiện của mình trong bố cục và gọi nó ở đó (như tôi đã chỉ cho bạn) .... hoặc chỉ sử dụng '@ if (yourCondition) {} 'trong trang trực tiếp (không cần phần nào) không liên quan đến trang' layout'. –

6

Đối với một bố cục nhất định không để render phần nhất định bạn cần phải có một cái gì đó như thế này là layout.cshtml của bạn

@RenderSection("Somestuff", required:false) 
5

Bạn có thể đặt một phần là tùy chọn bằng cách đặt thông số bắt buộc thành sai. Nếu bạn muốn bao gồm một số HTML trình bao bọc tùy chọn xung quanh phần của mình thì bạn cũng có thể sử dụng phương thức IsSectionDefined.

@if(IsSectionDefined("SideBar")) 
{ 
    <div class="sidebar"> 
     @RenderSection("SideBar", required: false) 
    </div> 
} 
Các vấn đề liên quan