English 中文(简体)
在不应实行的管制方面援引了Load和On PageLoad和OnPre Reander
原标题:PageLoad and OnPreRender invoked on controls that should not be rendered

我使用这个过于简化的代码块:

<% if (MyCondition())
{ %>
<myUsedControl/>
<% }
else
{ %>
<myUnusedControl/>
<% } %>

在我的 ascx 文件里。 我假设当 ASP. Net 阅读此页时, 如果 My Condition () 返回真实状态, 它会完全忽略其它条款中的内容。 事实并非如此, 我的未使用控制页面 PageLoad 和 On Preader 事件在我装入页面时仍然在被发射, 即使浏览器显示页面时我的未使用控制正确隐藏了 。

为什么这样呢? 我怎样才能确保一页完成时 一小块的阿斯克斯或阿斯普克斯被完全忽略呢?

谢谢你抽出时间

最佳回答

您可以使用第二个控件创建一个重复的页面, 并将您在管道中较早的状态分解设置为要控制哪个页面被装入 。

例如,您总可以手动将控件添加到后面代码中的控件收藏中,并围绕该代码进行分支,而不是在 ascx/aspx 页面标记中登记控件。

问题回答

ASP.NET 无法推断 Mine Condition () 并不取决于已签名的预发件人事件的执行。 还有一种可能性,即该方法具有副作用,不应执行两次,因此只应叫一次,而且越晚越好。 还需要在事件周期中随时更新所有控制; 当尚未初始化时, 您页面的不同组件如何工作, 而其它部分已经触发了后发事件?

在一个略为构思的例子中:

Boolean _condition;
Boolean MyCondition() {
调return _condition;
}

void MyContrivedPreRender(Object sender, EventArgs e) {
调_condition = true;
}

<% if(MyCondition()) { %>
调<asp:Literal runat="server" Text="Hello world?"
调调调调 OnPreRender="MyContrivedPreRender" />
<% } %>

根据您的条件( Load Control) 动态装入您在 Page OnInit 中的控件, 并在您需要的方法中使用该控件变量 。

public class MyClass { MyUserControl _controlVariable ;

protected override void OnInit(EventArgs e)
{
     if (MyCondition())  
     { 
          _controlVariable  = Loadcontrol("control1.ascx");
     }

     else  
     { 
         _controlVariable  = Loadcontrol("control2.ascx");

     }
  }
}




相关问题
Anyone feel like passing it forward?

I m the only developer in my company, and am getting along well as an autodidact, but I know I m missing out on the education one gets from working with and having code reviewed by more senior devs. ...

How to Add script codes before the </body> tag ASP.NET

Heres the problem, In Masterpage, the google analytics code were pasted before the end of body tag. In ASPX page, I need to generate a script (google addItem tracker) using codebehind ClientScript ...

Transaction handling with TransactionScope

I am implementing Transaction using TransactionScope with the help this MSDN article http://msdn.microsoft.com/en-us/library/system.transactions.transactionscope.aspx I just want to confirm that is ...

System.Web.Mvc.Controller Initialize

i have the following base controller... public class BaseController : Controller { protected override void Initialize(System.Web.Routing.RequestContext requestContext) { if (...

Microsoft.Contracts namespace

For what it is necessary Microsoft.Contracts namespace in asp.net? I mean, in what cases I could write using Microsoft.Contracts;?

Separator line in ASP.NET

I d like to add a simple separator line in an aspx web form. Does anyone know how? It sounds easy enough, but still I can t manage to find how to do it.. 10x!

热门标签