[英]Simple user control for conditionally rendering nested HTML
我想做的是能夠將兩個屬性傳遞給用戶控件,即ListName和Permission,如下所示:
<uc:check id="uc" List="Shared Documents" Permission="OpenItems" runat="server">
<!-- have some HTML content here that is rendered if the permission is true -->
</uc:check>
然后在實際檢查用戶控件中,進行以下操作:
<%@ Control language="C#" ClassName="check" %>
<%
// determine permission magic placeholder
if (DoesUserHavePermissions(perm))
{
// render nested HTML content
}
else
{
// abort rendering as to not show nested HTML content
}
%>
我已經閱讀了有關在MSDN上創建模板控件的頁面 ,盡管可以正常工作-對於我想做的事情,這似乎有些過頭了。 是否存在已經基於布爾表達式或更簡單的模板示例呈現內容的控件?
http://msdn.microsoft.com/en-us/library/36574bf6.aspx
更新:
可以在ascx中使用以下代碼來對此建模非常簡單:
<%@ Control Language="C#" ClassName="PermissionCheck" %>
<%@ Import Namespace="System.ComponentModel" %>
<script runat="server">
void Page_Init()
{
if (Allowed != null)
{
Panel container = new Panel();
Allowed.InstantiateIn(container);
PermissionBasedMessage.Controls.Add(container);
}
}
[PersistenceMode(PersistenceMode.InnerProperty)]
public ITemplate Allowed { get; set; }
</script>
<asp:Placeholder runat="server" ID="PermissionBasedMessage" />
注意:我簡化了此示例代碼的Page_Init方法中的檢查。 可以根據需要添加其他邏輯檢查。
並在調用HTML頁面中引用它:
<%@ Register src="PermissionCheck.ascx" tagname="PermissionCheck" tagprefix="uc1" %>
<uc1:PermissionCheck ID="PermissionCheck1" runat="server">
<Allowed>Allowed Access</Allowed>
</uc1:PermissionCheck>
您可以創建一個自定義控件而不是用戶控件:從asp.net面板派生,添加兩個屬性,然后僅在用戶具有所需權限時才呈現該控件。 例如這樣的事情:
控件(例如,將其放入App_Code中):
namespace MyControls
{
public class MyPanel : Panel
{
public string Permission { get; set; }
public string List { get; set; }
protected override void Render(System.Web.UI.HtmlTextWriter writer)
{
if (UserHasPermission()) base.Render(writer);
}
}
}
使用控件:
<%@ Page ... %>
<%@ Register Namespace="MyControls" TagPrefix="mc" %>
<html>
...
<mc:MyPanel runat="server" List="Shared Documents" Permission="OpenItems">
put content and/or other controls here
</mc:MyPanel>
...
為什么不擴展LiteralControl,為設置添加屬性,然后將html呈現為LieralControl的.Value? 與使用模板控件相比,看起來非常簡單,而且省去了很多麻煩
用占位符控件包裝內容,並將控件的可見性設置為true或false(具有.Visible = false的控件將不會呈現任何html)
<asp:PlaceHolder id =“ phWrapper” runat =“ server”>
...
</ ASP:占位符>
然后在您的代碼隱藏集中設置phWrapper.Visible = DidUserUserHavePermissions(perm);
希望有幫助!
其他答案對您問題的一般形式很好,但是對於檢查權限,SPSecurityTrimmedControl可能會滿足您的要求。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.