遇到了像下面一样的问题。
系统的架构中使用了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!!
系统的架构中使用了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!!
子页面的基本空间也不知道到哪里去了!
me.Page.FindControl("txtEmployeeCode")都找不到!
郁闷!
.ControlToValidate = txtEmployeeCode.clientId如果都自己写微软还用他干吗??
所以才会报错阿!.ControlToValidate = txtEmployeeCode 或
.ControlToValidate = txtEmployeeCode.clientId
我也测试过了,一样的问题!
现在最核心的好像是,子页面load的时候,自己的控件都没有放在form中一样,
我把me.page.from的controls的打出来,没有一个子页面的控件名字。
me.Page.form.FindControl("txtEmployeeCode")也找不到!
.ControlToValidate = txtEmployeeCode.UniqueID
,因为经过MASTER母页之后,该控件的名字前面多了一些系统加的标示符,像这样
ctl00$main$txtEmployeeCode。本来是通过txtEmployeeCode来访问的控件,必须通过新的ID
来访问了。
另外,分析一下。ctl00:master页面ID(可能不固定随机可能性很大)
main:contentplaceholder的ID,txtEmployeeCode:子页面的控件名。