遇到了像下面一样的问题。
系统的架构中使用了master来做通用的结构。因为master里面使用了treeview, menu,所以master里面加了服务器端的form,名字为form1.大体程序(master):
    <form id="form1" runat="server">
     <div id="main_Head" class="main_Boder">
          <asp:menu /></div>
        <div id="main_Mid" class="main_Boder">
        <table><tr><td><asp:TreeView /></td>
            <td align=left ><asp:contentplaceholder id="main" runat="server">
            </asp:contentplaceholder></td><tr>
        </table>
        </div>
    <asp:sitemapdatasource id="SMD_Menu" runat="server" />
    </form>
在小的具体页面上,给一个textbox加必须输入的检查。
直接在页面上写个静态的asp:RequiredFieldValidator,没有任何问题。
但是,有一些业务的原因。希望在pageload的时候动态加载必须输入的检查控件。
所以,我就这样写了
            Dim obj As New System.Web.UI.WebControls.RequiredFieldValidator
            With obj
                .ID = "vaild1"
                .ControlToValidate = txtEmployeeCode.ID(需要检查的textbox名字)
                .Display = System.Web.UI.WebControls.ValidatorDisplay.None
                .ErrorMessage = "this is required!"
                .Text = .ErrorMessage
            End With
            Me.Page.Form.Controls.Add(obj)
结果出了异常,说txtEmployeeCode.ID在form中找不到。
难道使用了master,页面的FORM就只能找到master的控件,子画面的就找不到了吗?
另外master已经有了服务器端的form,子画面也不可能再加一个自己的form了。
如果不使用master,直接做一张页面(自己页面有form),后台动态加载也是没有问题的!
合在一起就不行了!
怎么才能动态加上啊?SOS!!

解决方案 »

  1.   

    现在就想动态加载。
    子页面的基本空间也不知道到哪里去了!
    me.Page.FindControl("txtEmployeeCode")都找不到!
    郁闷!
      

  2.   

    .ControlToValidate = txtEmployeeCode 或
    .ControlToValidate = txtEmployeeCode.clientId如果都自己写微软还用他干吗??
      

  3.   

    就使用master的FORM就好了 怎么会出问题呢?不了解
      

  4.   

    master的FORM中没有我要想检查的控件。
    所以才会报错阿!.ControlToValidate = txtEmployeeCode 或
    .ControlToValidate = txtEmployeeCode.clientId
    我也测试过了,一样的问题!
    现在最核心的好像是,子页面load的时候,自己的控件都没有放在form中一样,
    我把me.page.from的controls的打出来,没有一个子页面的控件名字。
    me.Page.form.FindControl("txtEmployeeCode")也找不到!
      

  5.   

    经过不懈的努力,终于知道怎么写了。
    .ControlToValidate = txtEmployeeCode.UniqueID
    ,因为经过MASTER母页之后,该控件的名字前面多了一些系统加的标示符,像这样
    ctl00$main$txtEmployeeCode。本来是通过txtEmployeeCode来访问的控件,必须通过新的ID
    来访问了。
    另外,分析一下。ctl00:master页面ID(可能不固定随机可能性很大)
    main:contentplaceholder的ID,txtEmployeeCode:子页面的控件名。