我有这样的usercontrol(.ascx):
<% if (HasAccessMediaPlans) { iPortletCounter++; %>
<div class="orange-portlet-box">
<div class="HomeModulePortletTitle"><a href="<%= (RawHtml)RootPath %>MediaPlanning/Default.aspx">Plans</a></div>
<p>Create // Edit // Review</p>
</div>
<div style="clear: both;"></div>
<% } %>
其中HasAccessMediaPlans是在用户控件的代码(.ascx.cs)中定义的变量,它是在页面加载中分配的。
protected Boolean HasAccessMediaPlans = false;
protected void Page_Load(object sender, EventArgs e) {
HasAccessMediaPlans = SessionState.CurrentUser.HasModuleAccess(MediaString + " Plans");
}
我的问题是:如何避免嵌入&lt; %%&gt;中嵌入的内联服务器代码?在我的usercontrol标记(.ascx)?
答案 0 :(得分:1)
您可以使用服务器端容器控件(例如<div id="wrapper" runat="server">
)包装这段代码,并在服务器端以所需方式分配其可见性属性。
这样可以避免使用代码乱丢.aspx
/ .ascx
个文件,并将代码保存在代码隐藏文件中。
答案 1 :(得分:1)
<div class="orange-portlet-box" id="dvBox" runat="server">
<div class="HomeModulePortletTitle">
<a id="aLink">Plans</a>
</div>
<p>Create // Edit // Review</p>
</div>
<div style="clear: both;"></div>
在代码背后
Boolean HasAccessMediaPlans = false;
protected void Page_Load(object sender, EventArgs e)
{
HasAccessMediaPlans = SessionState.CurrentUser.HasModuleAccess(MediaString + "Plans");
dvBox.Visible = HasAccessMediaPlans;
aLink.HREF = RootPath + "MediaPlanning/Default.aspx";
}