1

我有一个这样的用户控件(.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");
}

我的问题是:如何避免在我的 usercontrol markup(.ascx) 中嵌入 <% %> 的内联服务器代码?

4

2 回答 2

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";
}
于 2012-10-03T19:23:51.097 回答
1

您可以使用服务器端容器控件(例如 )包装这段代码,<div id="wrapper" runat="server">并在服务器端以所需的方式分配其可见性属性。

这样可以避免在.aspx/.ascx文件中乱扔代码,并将代码保留在代码隐藏文件中。

于 2012-10-03T18:58:41.373 回答