2011-07-06 28 views
5

Có cách nào để thực hiện công việc tuyên bố using với các phương pháp chung trong các chế độ xem dao cạo không? Ví dụ tôi muốn các webforms đoạn mãSử dụng các phương pháp chung trong chế độ xem dao cạo

<% using(Html.BeginForm<Controller>(c => c.Method())) 
    { %> 
     Some code 
<% } %> 

chuyển đổi sang dao cạo như thế này

@using(Html.BeginForm<Controller>(c => c.Method())) 
{ 
    Some code 
} 

nhưng điều đó không làm việc, kể từ khi diễn giải dao cạo <Controller> như một thẻ HTML. Thêm dấu ngoặc đơn không hoạt động, vì dao cạo không bao gồm dấu ngoặc nhọn bắt đầu và kết thúc BeginForm. Dưới đây là các cách tiếp cận khác nhau mà tôi đã thử và tôi không thể nghĩ ra thêm nữa.

@using(Html.BeginForm<Controller>(c => c.Method())) // Interpreted as c# to '<Controller>' 
{             // interpreted as HTML 
    Some code          // interpreted as HTML 
}             // interpreted as HTML 

@(using(Html.BeginForm<Controller>(c => c.Method()))) // Interpreted as c# 
{              // interpreted as HTML 
    Some code           // interpreted as HTML 
}              // interpreted as HTML 

@{using(Html.BeginForm<Controller>(c => c.Method())) // Interpreted as c# 
    {            // interpreted as c# 
     Some code         // interpreted as c# 
    }            // interpreted as c# 
}             // interpreted as c# 

@(using(Html.BeginForm<Controller>(c => c.Method()))) // Interpreted as c# 
@{             // interpreted as c# 
     Some code          // interpreted as c# 
}              // interpreted as c#  

Aynone có biết cách thực hiện việc này không?

Cập nhật: Có vẻ như cách thứ ba ở trên là cách thực hiện việc này. Dao cạo dường như hoạt động như thế này:

@{using(Html.BeginForm<Controller>(c => c.Method())) // Interpreted as c# 
    {            // interpreted as c# 
     <p>           // interpreted as HTML 
     Some text         // interpreted as HTML 
     @Code          // interpreted as c# 
     </p>           // interpreted as HTML 
    }            // interpreted as c# 
}             // interpreted as c# 

Không phải cách rõ ràng nhất để làm mọi thứ, nhưng nó hoạt động.

Cập nhật 2: Dao cạo có thể đã được cập nhật tại một số điểm, vì bây giờ tùy chọn # 1 ở trên hoạt động như mong đợi.

@using(Html.BeginForm<Controller>(c => c.Method())) 
{ 
    Some code 
} 
+0

Dường như tôi chỉ hoạt động tốt khi kết thúc. Nhưng không có 'BeginForm ' có sẵn (tôi đã thực hiện một phương thức trợ giúp nhanh để kiểm tra), vậy bạn có đang sử dụng thư viện bên ngoài hay gì đó không? Lỗi trong cú pháp Razor là gì? – Buildstarted

+0

Chúng tôi đang sử dụng các phần mở rộng MvcContrib từ Microsoft.Web.Mvc.dll, có chứa một số trình trợ giúp html được nhập mạnh mẽ. Lỗi là @ (Html.BeginForm (...)) hoạt động tốt nhưng @using (Html.BeginForm (...)) không và tôi không thể tìm ra cách để định dạng nó để nó công việc. –

Trả lời

7

gì nếu bạn bọc toàn bộ tuyên bố trong dấu ngoặc:

@(using(Html.BeginForm<Controller>(c => c.Method()))) 

Hoặc sử dụng một khối mã?

HTH.

+0

Tôi đã thử điều đó và nó không tốt. Đã thêm ví dụ về các lần thử khác nhau ở trên. –

+0

Làm việc cho tôi trong MVC 4.5. –

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