bal*_*dre 14 c# html-helper asp.net-mvc-3
我有一个扩展方法,用于验证用户是否能够根据角色查看网页的一部分.
如果我简单地删除内容,这会带给我更多的工作,因为所有丢失的表单在保存时都无法正确注册,我必须通过修改所有代码来处理这种行为,所以我想为什么不只是使用display:none;
属性?
我希望有类似的东西:
@using(Html.RoleAccess(currentUser, RoleAccessType.Content_General_Website))
{
...
}
Run Code Online (Sandbox Code Playgroud)
并且这会写如下:
<div class="role_Content_General_Website" style="display:none;">
...
</div>
Run Code Online (Sandbox Code Playgroud)
或者display:block;
如果用户有权访问...
我可以创建一个简单的HtmlHelper
但如何编写一个也输出结尾</div>
?
public static string RoleAccess(
this HtmlHelper helper,
UserInfo user,
RoleAccessType role)
{
return
String.Format(
"<div class='role_{0}' style='display:{1}'>",
role.ToString(), user.HasAccess(role));
}
Run Code Online (Sandbox Code Playgroud)
Dar*_*rov 22
public static class HtmlExtensions
{
private class RoleContainer : IDisposable
{
private readonly TextWriter _writer;
public RoleContainer(TextWriter writer)
{
_writer = writer;
}
public void Dispose()
{
_writer.Write("</div>");
}
}
public static IDisposable RoleAccess(this HtmlHelper htmlHelper, string role)
{
var user = htmlHelper.ViewContext.HttpContext.User;
var style = "display:none;";
if (user.IsInRole(role))
{
style = "display:block;";
}
var writer = htmlHelper.ViewContext.Writer;
writer.WriteLine("<div class=\"role_Content_General_Website\" style=\"" + style + "\">");
return new RoleContainer(writer);
}
}
Run Code Online (Sandbox Code Playgroud)
然后你可以像这样使用它:
@using(Html.RoleAccess("Administrator"))
{
...
}
Run Code Online (Sandbox Code Playgroud)
您显然可以调整助手的参数以满足您的要求:
public static IDisposable RoleAccess(
this HtmlHelper helper,
UserInfo user,
RoleAccessType role
)
{
var style = "display:none;";
if (user.HasAccess(role))
{
style = "display:block;";
}
var writer = htmlHelper.ViewContext.Writer;
writer.WriteLine("<div class=\"role_" + role.ToString() + "\" style=\"" + style + "\">");
return new RoleContainer(writer);
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5560 次 |
最近记录: |