Asp.net mvc 4 如何使用辅助方法有条件地输出视图的一部分
假设我有以下观点:Asp.net mvc 4 如何使用辅助方法有条件地输出视图的一部分,asp.net-mvc-4,razor,Asp.net Mvc 4,Razor,假设我有以下观点: <td> @Html.ActionLink("Delete") </td> 重载版本: <td> @Html.ActionLink("Delete", "Delete", Permissions.DeleteItems) </td> 然而,BeginForm——它实际上并没有对括号中的视图片段做任何处理。是否有方法使用帮助器删除括号内的标记 @using(Html.ShowIf(...)) { ...
<td>
@Html.ActionLink("Delete")
</td>
重载版本:
<td>
@Html.ActionLink("Delete", "Delete", Permissions.DeleteItems)
</td>
然而,BeginForm
——它实际上并没有对括号中的视图片段做任何处理。是否有方法使用帮助器删除括号内的标记
@using(Html.ShowIf(...))
{
...
}
是的,你可以。下面是一个仅适用于
Razor
的示例:
@using (this.BeginPermissionScope(Permissions.DeleteItems))
{
using (Html.BeginForm("Delete", "Home"))
{
<input type="submit" value="Submit" />
}
}
您的意思是使用
BeginForm
或使用(Html.yourheloper()){…}之类的帮助程序删除括号内的标记?@渐近错误:使用(…)之类的帮助程序-我将进行编辑以澄清。很好,我正在编写一个示例来完成类似的操作。
@using(Html.BeginForm(...))
{
...
}
@using(Html.ShowIf(...))
{
...
}
@using (this.BeginPermissionScope(Permissions.DeleteItems))
{
using (Html.BeginForm("Delete", "Home"))
{
<input type="submit" value="Submit" />
}
}
public static class HtmlHelperPermissionScopeExtensions
{
/// <summary>
/// Begin new rendering scope based on current user permissions
/// </summary>
public static IDisposable BeginPermissionScope(this WebViewPage webViewPage, Permissions permission)
{
var currentIdentity = webViewPage.User.Identity;
bool userHasPermission = currentIdentity.HasPermission(permission);
return new PermissionScopeHelper(webViewPage, !userHasPermission);
}
/// <summary>
/// Helper class that replaces current output stream with its own
/// </summary>
private sealed class PermissionScopeHelper : IDisposable
{
WebViewPage webViewPage;
TextWriter oldWriter;
TextWriter newWriter;
/// <summary>
/// Initializes helper class instance. If ignoreMarkupUntilDispose is set to true, then
/// all markup writen to response will be ignored
/// </summary>
public PermissionScopeHelper(WebViewPage page, bool ignoreMarkupUntilDispose)
{
if (ignoreMarkupUntilDispose)
{
webViewPage = page;
newWriter = new StringWriter();
// Replace output TextWriter for Write() and WriteLiteral() methods
webViewPage.OutputStack.Push(newWriter);
// Replace output TextWriter for all HtmlHelper and AjaxHelper extensions
oldWriter = webViewPage.ViewContext.Writer;
webViewPage.ViewContext.Writer = newWriter;
}
}
/// <summary>
/// Restore output TextWriters
/// </summary>
public void Dispose()
{
if (webViewPage != null)
{
webViewPage.ViewContext.Writer = oldWriter;
webViewPage.OutputStack.Pop();
newWriter.Dispose();
}
}
}
}