如何避免.aspx .ascx中的内联代码

时间:2012-10-03 18:55:56

标签: asp.net user-controls

我有这样的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)?

2 个答案:

答案 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";
}