做页面时用到了用户控件(.ascx),引用用户控件时,遇到了两个奇怪的问题:一、把用户控件拖到.aspx文件中后,运行页面,但也没内容,一片空白,什么内容都没有(.ascx内容为一个资料录入表单)
二、页面.aspx用的Button按钮失效,点击后触发不了,手动注册按钮事件后(this.UserAndCarInfo_btn_Sure.Click += new EventHandler(UserAndCarInfo_btn_Sure_Click);),也没用但是,奇怪的是,当我重建一个.aspx页面,然后再引入用户控件,添加按钮后,所有功能又一切正常了,但是,运行几次之后,过段时间,又出现上面提到的问题了在做一个新项目,尚在UI阶段,页面中并没有多余的代码,只是按照业务流程把各个页面串联起来,突然遇到这个问题,很是烦恼,但同事做的页面,却未出现此问题,而且把我的项目放在他机器上还是会出现上述问题我这边的环境是VS2005,系统Window server 2003,希望遇到过此问题的朋友给予指点一二,

解决方案 »

  1.   

    在vs2005里没遇到过这样的怪情况
    如果是vs2003的话,倒是怀疑是不是事件的绑定丢失了
      

  2.   

    一、把用户控件拖到.aspx文件中后,运行页面,但也没内容,一片空白,什么内容都没有(.ascx内容为一个资料录入表单) ----------------------------------------对比一下有问题的引用用户控件页面和正常页面的有什么不同?
      

  3.   

    还有一点的是用户控件里面的绑定代码不要放在IsPostBack里面。
      

  4.   

    Re gdjlc:你说的两种方式我都看了,都没问题,“用户控件里面的绑定代码为什么不要放在IsPostBack里面”?我这边暂时正常的页面放在if(!Page.IsPostBack),跟不放在里面,用户控件内容都不显示
      

  5.   

    页面代码:
    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="AdviceRepairContent.aspx.cs" Inherits="RepairWelcom_AdviceRepairContent" %><%@ Register Src="../UserControl/AdviceRepairContent.ascx" TagName="AdviceRepairContent"
        TagPrefix="uc1" %><!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 runat="server">
        <title>建议维修内容</title>
        <link href="../CSS/main.css" rel="stylesheet" type="text/css" />
        <script type="text/javascript" language="javascript" src="../JS/DatePicker/WdatePicker.js" />    <link href="../CSS/main.css" rel="stylesheet" type="text/css" />
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
            <uc1:AdviceRepairContent ID="AdviceRepairContent_UC_Show" runat="server" />
            <asp:Button ID="AdviceRepairContent_btn_Pre" runat="server" OnClick="AdviceRepairContent_btn_Pre_Click"
                Text="上一步" /><asp:Button ID="AdviceRepairContent_btn_Next" runat="server" OnClick="AdviceRepairContent_btn_Next_Click"
                    Text="下一步" /></div>
        </form>
    </body>
    </html>后台C#代码:
    using System;
    using System.Data;
    using System.Configuration;
    using System.Collections;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;public partial class RepairWelcom_AdviceRepairContent : PersistencePage
    {
        AdviceRepairContentManage ARCM = new AdviceRepairContentManage();    string WelcomeMode = null;    protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                
            }
            
            ARCM.FirstLoad(AdviceRepairContent_UC_Show);        if (Request.QueryString["WelcomeMode"] != null)
            {
                WelcomeMode = Request.QueryString["WelcomeMode"].Trim();
            }
        }    //上一步
        protected void AdviceRepairContent_btn_Pre_Click(object sender, EventArgs e)
        {
            Response.Redirect("../RepairWelcom/RepairItems.aspx?taoist_PageStateSession=RepairItemsPage");
        }    //下一步
        protected void AdviceRepairContent_btn_Next_Click(object sender, EventArgs e)
        {
            this.SavePageStateToSession("AdviceRepairContentPage");
            Response.Redirect("../RepairWelcom/DistributionWork.aspx?WelcomeMode=" + WelcomeMode);
        }
    }
      

  6.   

    Re wl_bdqn:我这样做过很多次了,重建好后,可以正常运行,但是,过一段时间,就又会出现上述问题还有一点:如果我把同一用户控件放在一个根目录下的.aspx页面中也不会出现上述问题
      

  7.   

    用户控件在解析的时候,会把产生的HTML,原原本本的添加到页面上
    比如用户控件的路径是 /userctrl/(引用WdatePicker的路径可能是: ../my97datepicker/WdatePicker.js)
    应用页面的路径是:  / (引用WdatePicker的路径可能是: my97datepicker/WdatePicker.js)
    他们的引用路径是不一样的,因此,你必须在用户控件里面使用下面的引用路径才可以在引用页面里面正常显示还有个比较好的方法,就是使用绝对路径来引用,asp.net里面的 ~ 符号表示当前应用的路径
    因此引用路径可以写成 ~/my97datepicker/WdatePicker.js