Tôi đang cố viết một trình trợ giúp html kiểu BeginForm sử dụng IDisposable để bọc mã khác. Tôi muốn người trợ giúp chỉ hiển thị mã được bao bọc nếu một điều kiện nhất định được đáp ứng (ví dụ: người dùng có vai trò nhất định).Chụp nội dung được bao bọc trong bộ trợ giúp html dùng một lần theo phong cách BeginForm
Tôi nghĩ rằng tôi có thể chỉ cần chuyển ngữ cảnh.Writer trong phương thức Begin và chuyển nó trở lại trong phương thức Dispose. Mã bên dưới biên dịch và chạy nhưng nội dung được bao bọc được hiển thị trong mọi trường hợp. Nếu tôi bước qua nó, nội dung được bao bọc không được ghi vào StringWriter mới và do đó không nằm trong tầm kiểm soát của tôi.
public static IDisposable BeginSecure(this HtmlHelper html, ...)
{
return new SecureSection(html.ViewContext, ...);
}
private class SecureSection : IDisposable
{
private readonly ViewContext _context;
private readonly TextWriter _writer;
public SecureSection(ViewContext context, ...)
{
_context = context;
_writer = context.Writer;
context.Writer = new StringWriter();
}
public void Dispose()
{
if (condition here)
{
_writer.Write(_context.Writer);
}
_context.Writer = _writer;
}
}
Tôi đang cố gắng làm gì với người trợ giúp html?
Tôi biết rằng trình trợ giúp html khai báo trong dao cạo có thể hoạt động nhưng sẽ thích cách tiếp cận trợ giúp html chuẩn nếu có thể, với giới hạn app_code của trình trợ giúp dao cạo trong MVC3.
Bạn nên bình luận-out "allowcontent" mã, chỉ cần làm gì ở đó. Nếu không, tôi sẽ nhận được nội dung lồng nhau. Ngoài ra, việc sao lưu chỉ cần thiết khi Được phép là 'false' – Alex
Cảm ơn @jitbit, tôi đã cập nhật bài đăng của mình. Chỉ cần một suy nghĩ bằng cách này: lớp bảo đảm này thêm rất ít giá trị so với các câu lệnh if built-in đơn giản ... Tôi sẽ chỉ thực hiện tuyến này nếu bạn cần thao tác HTML và đã thử tất cả các tùy chọn khác. Tôi đã làm việc với Razor rất nhiều kể từ khi tôi thực hiện bài đăng này, và tìm cú pháp "sử dụng" trong Razor xem lạm dụng ngôn ngữ chứ không phải là đường cú pháp. – Moeri