次のような MVC の拡張機能を作成するつもりです。
public static class DivExtension
{
public static MvcHtmlElement BeginDiv(this HtmlHelper helper)
{
return new MvcDiv(helper.ViewContext).BeginDiv("","");
}
public static MvcHtmlElement BeginDiv(this HtmlHelper helper, string id)
{
return new MvcDiv(helper.ViewContext).BeginDiv(id,"");
}
}
Razor では、次のように使用できます。
@{using(Html.BeginDiv())
{
<text>
This should appear inside a div <input type="text" value="oi" />
</text>
}
}
次の HTML 出力が生成されます。
<div>
This should appear inside a div <input type="text" value="oi" />
</div>
しかし、単にdivを作成する代わりに、私のコードがロールを表す文字列を受け取り、ログインしているユーザーが指定されたロールに属していない場合、この拡張機能内の HTML を抑制する必要があると想像してください:
public static class HtmlAuthSuppressor
{
public static MvcHtmlElement AuthHTML(this HtmlHelper helper, string roles)
{
//some code that would allow suppression
}
}
そして、私がこのように使用する場合:
<b>Do you see something below?</b>
@{using(Html.AuthHTML("Role_Super_User"))
{
<text>
Congratz!!! You can see this, u are super, indeed. <input type="text" value="oi" />
</text>
}
}
ユーザーが指定された役割に属していない場合、最終的な HTML 出力は次のようになります。
<b>Do you see something below?</b>
それは可能ですか?
更新: 次のような HTML を生成できることはわかっています。
<b>Do you see something below?</b>
<!--
Congratz!!! You can see this, u are super, indeed. <input type="text" value="oi" />
--!>
しかし、それは私が明らかにしたくないことをクライアントに明らかにするだけでなく、レスポンスを不必要に重くすることにもなります。