更新 2
因此,您希望尽可能多地保留视图之外的逻辑,在这种情况下,您可以将 if 条件从视图中拉出并放入HtmlHelper
扩展方法中。
public static class HtmlHelperExtensions
{
public static bool IsAdmin(this HtmlHelper htmlHelper)
{
return htmlHelper.ViewContext.HttpContext.Current.User.IsInRole("admin");
}
}
用法:
@if (Html.IsAdmin()) {
...
}
更新
如果您只想在用户担任角色时输出某些内容,那么这种帮助者完全是矫枉过正。你应该if
在你的观点中寻求一个简单的陈述。
@if (HttpContext.Current.User.IsInRole("admin")) {
...
}
制作自定义助手
去年我发布了一篇关于这个主题的博客文章BeginForm()
,我打开了 ASP.NET MVC 源代码,看看它是如何组合在一起的,并且是我自己的。这是亮点,这将允许您<div>
在 MVC 视图中环绕块。
public class MvcDiv : IDisposable
{
private bool _disposed;
private readonly FormContext _originalFormContext;
private readonly ViewContext _viewContext;
private readonly TextWriter _writer;
public MvcDiv(ViewContext viewContext)
{
if (viewContext == null)
{
throw new ArgumentNullException("viewContext");
}
_viewContext = viewContext;
_writer = viewContext.Writer;
_originalFormContext = viewContext.FormContext;
viewContext.FormContext = new FormContext();
Begin();
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
public void Begin()
{
_writer.Write("<div>");
}
private void End()
{
_writer.Write("</div>");
}
protected virtual void Dispose(bool disposing)
{
if (!_disposed)
{
_disposed = true;
End();
if (_viewContext != null)
{
_viewContext.OutputClientValidation();
_viewContext.FormContext = _originalFormContext;
}
}
}
public void EndForm()
{
Dispose(true);
}
}
然后把这个扩展方法放在某处:
public static class HtmlHelperExtensions
{
public static MvcDiv BeginDiv(this HtmlHelper htmlHelper)
{
return new MvcDiv(htmlHelper.ViewContext);
}
}
然后你可以像这样使用它:
@using (Html.BeginDiv())
{
...
}