2013-07-30 26 views
7

Tôi có mô hình với thuộc tính object và số id loại giá trị và muốn tạo điều khiển trình chỉnh sửa khác tùy thuộc vào số loại giá trị.Chức năng Razor @helper không hiển thị bất kỳ Html

Tôi đang cố gắng sử dụng @help kết cấu dao cạo, tuy nhiên không có nội dung nào của người trợ giúp được hiển thị trên trang.

@helper noEditor() 
{ 
    <div>noEditor</div> 
} 
@helper stringEditor() 
{ 
    <div>stringEditor</div> 
} 
@helper intEditor() 
{ 
    <div>intEditor</div> 
} 
@helper boolEditor() 
{ 
    <div>boolEditor</div> 
} 
@helper collectionEditor() 
{ 
    <div>collectionEditor</div> 
} 

@switch(Model.ValueTypeId) 
{ 
    case 1: stringEditor(); break; 
    case 2: intEditor(); break; 
    case 3: boolEditor(); break; 
    case 4: collectionEditor(); break; 
    default: noEditor(); break; 
} 

Khi tôi đặt một điểm break trên @switch tôi có thể thấy động thái debugger để helper chính xác, nhưng nó sẽ bỏ qua ngay lập tức đến hết các chức năng sau đó thoát ra công tắc, không có gì là ra.

Bất kỳ ý tưởng nào về những gì tôi đang làm sai ở đây?

Trả lời

18

Để hiển thị văn bản bằng Razor, bạn phải sử dụng ký hiệu @. Nếu bạn thay đổi mã của mình thành

@switch(Model.ValueTypeId) 
{ 
    case 1: @stringEditor() break; 
    case 2: @intEditor() break; 
    case 3: @boolEditor() break; 
    case 4: @collectionEditor() break; 
    default: @noEditor() break; 
} 

nó sẽ hoạt động.

Alternative bạn có thể sử dụng Response.Write như thế này:

@switch(Model.ValueTypeId) 
{ 
    case 1: Response.Write(stringEditor()); break; 
    case 2: Response.Write(intEditor()); break; 
    case 3: Response.Write(boolEditor()); break; 
    case 4: Response.Write(collectionEditor()); break; 
    default: Response.Write(noEditor()); break; 
} 

mà về cơ bản là những gì @ làm trong dao cạo.

+0

Nó luôn luôn là một cái gì đó đơn giản như thế này mà làm cho tôi xé tóc của tôi ra. Tôi sẽ sửa chữa ngay sau khi bộ đếm thời gian hoạt động. Cảm ơn ngài. – asawyer

+0

Vâng, nó thường là :) Không có vấn đề, vui vì tôi có thể giúp đỡ. –

+0

Bạn phải sử dụng "@" ngay cả khi bạn đang sử dụng trình trợ giúp ngay sau "@if". Ví dụ: '@if (Model.Any()) {@ Html.EditorFor (...); } ' – Mike