Page_Load没有在UserControl中触发

时间:2011-02-22 21:00:05

标签: c# asp.net c#-3.0

我在类库中的c#中创建了一个类,我已将此控件添加到default.aspx中,但是我的代码没有触发page_load事件。这是代码:

我做错了什么?

页面加载但未在页面上显示标签。我已将控件正确添加到页面中,没有任何错误。我有事件在那里添加了寄存器标记。

html代码:<RandoIntegerControls:RandomIntegerControl ID="RandomIntegerControl1" runat="server"></RandoIntegerControls:RandomIntegerControl>

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web.UI.WebControls;

namespace CSIMedia.WebControls
{

  public class RandomIntegerControl : PlaceHolder
  {

    private Label _Label;


    public RandomIntegerControl()
    {

    }

    private void Page_Load(Object sender, EventArgs e)
    {

        this._Label = new Label();
        this.Controls.Add(this._Label);
        this._Label.Text = "Enter random values:";

    }

  }
}

Default.aspx页面:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<%@ Register TagPrefix="RandoIntegerControls" Assembly="CSIMedia.WebControls" Namespace="CSIMedia.WebControls"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <RandoIntegerControls:RandomIntegerControl ID="RandomIntegerControl1" runat="server"></RandoIntegerControls:RandomIntegerControl>
    </div>
    </form>
</body>
</html>

3 个答案:

答案 0 :(得分:9)

试试这个:

public RandomIntegerControl()
{
    this.Load += Page_Load;
}

在页面(和用户控件)中,由于此属性,Page_Load方法通常会自动附加:

<%@ Page ... AutoEventWireup="true" ... %>

如果你没有aspx / ascx文件,它不会自动发生,但你仍然可以用上面的代码手动连接它。

答案 1 :(得分:2)

您继承自PlaceHolder,它是一个Web控件,不会处理Page_Load事件。只有用户控件(.ascx)才能隐式处理该事件。

根据您发布的代码的外观,您可能最好使用UserControl,或者如果您需要在多个项目中重用它,请从头开始创建Web控件。

答案 2 :(得分:0)

事实证明,您可以覆盖Page_Load标记文件中的aspx。该文件继承自基本文件。

<%@ Control Language="C#" AutoEventWireup="true" 
    CodeBehind="TestUserControl.ascx.cs" Inherits="TestUserControl" %>

覆盖示例:

<script language="C#" runat="server">
    public void Page_Load(object sender, EventArgs e)
    {
        ...
    }
</script>

此函数会覆盖代码隐藏版本。

相关问题