http://community.csdn.net/Expert/topic/5432/5432250.xml?temp=.512768
http://community.csdn.net/Expert/topic/5432/5432306.xml?temp=.6382715
在控件中this.Parent.Controls.Add(req);
这里出错提示:
在 DataBind、Init、Load、PreRender 或 Unload 阶段,不能修改该控件集合。我想这里是因为这里是控件而网页还没有加载完吧(我的理解)
如果用this.Controls.Add(req);
HTML就为:
<span id="WebRev1" style="color:Red;visibility:hidden;"><span id="ctl02" style="color:Red;visibility:hidden;">没有输入</span></span>
而正确的应该为
<span id="WebRev1" style="color:Red;visibility:hidden;"></span><span id="ctl02" style="color:Red;visibility:hidden;">没有输入</span>
这样才对
http://community.csdn.net/Expert/topic/5432/5432306.xml?temp=.6382715
在控件中this.Parent.Controls.Add(req);
这里出错提示:
在 DataBind、Init、Load、PreRender 或 Unload 阶段,不能修改该控件集合。我想这里是因为这里是控件而网页还没有加载完吧(我的理解)
如果用this.Controls.Add(req);
HTML就为:
<span id="WebRev1" style="color:Red;visibility:hidden;"><span id="ctl02" style="color:Red;visibility:hidden;">没有输入</span></span>
而正确的应该为
<span id="WebRev1" style="color:Red;visibility:hidden;"></span><span id="ctl02" style="color:Red;visibility:hidden;">没有输入</span>
这样才对
{ MyRegValidtor reg = new MyRegValidtor();
reg.NotNullMessage = "不可空";
reg.ControlToValidate = "TextBox1";
reg.ValidationExpression = @"\d*";
reg.ErrorMessage = "只许输入数字!";
this.form1.Controls.Add(reg);
}
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:Button ID="Button1" runat="server" Text="Button" />
</form>
using System;
using System.Data;
using System.Configuration;
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;/// <summary>
/// MyRegValidtor 的摘要说明
/// </summary>
public class MyRegValidtor:System.Web.UI.WebControls.RegularExpressionValidator
{
public MyRegValidtor()
{
//
// TODO: 在此处添加构造函数逻辑
//
} protected override void OnInit(EventArgs e)
{
RequiredFieldValidator req = new RequiredFieldValidator();
req.ControlToValidate = this.ControlToValidate;
req.ErrorMessage = this.NotNullMessage;
this.Parent.Controls.Add(req);
base.OnInit(e);
} public string NotNullMessage
{
get
{
return ViewState["NotNullMessage"] != null ? (string)ViewState["NotNullMessage"] : "";
} set {
ViewState["NotNullMessage"] = value;
}
}
}
但是我写到成控件的时候
this.Parent.Controls.Add(req); 这一句就不行了
以下是我的理解:
因为现在是在控件里面Parent是为空的或者页面添有加载完成的时候不存在
这里出错提示:
在 DataBind、Init、Load、PreRender 或 Unload 阶段,不能修改该控件集合。我想这里是因为这里是控件而网页还没有加载完吧(我的理解)
如果用this.Controls.Add(req);
HTML就为:
<span id="WebRev1" style="color:Red;visibility:hidden;"><span id="ctl02" style="color:Red;visibility:hidden;">没有输入</span></span>
而正确的应该为
<span id="WebRev1" style="color:Red;visibility:hidden;"></span><span id="ctl02" style="color:Red;visibility:hidden;">没有输入</span>
这样才对
using System.Data;
using System.Configuration;
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;namespace ZYCControl
{
public class webRev : System.Web.UI.WebControls.RegularExpressionValidator
{
protected System.Web.UI.HtmlControls.HtmlForm form1;
public string NotNullMessage
{
get
{
return ViewState["NotNullMessage"] != null ? (string)ViewState["NotNullMessage"] : "";
} set
{
ViewState["NotNullMessage"] = value;
}
} protected override void OnInit(EventArgs e)
{
RequiredFieldValidator req = new RequiredFieldValidator();
req.ControlToValidate = this.ControlToValidate;
req.ErrorMessage = this.NotNullMessage;
form1 = new HtmlForm();
form1.Controls.Add(req);
base.OnInit(e);
}
}
}
req.ControlToValidate = this.ControlToValidate;
req.ErrorMessage = this.NotNullMessage;
this.Parent.Controls.Add(req);
base.OnInit(e);提示:在 DataBind、Init、Load、PreRender 或 Unload 阶段,不能修改该控件集合。
<asp:Button ID="Button1" runat="server" Text="Button" />
这是aspx
protected override void OnLoad(EventArgs e)
{
RequiredFieldValidator req = new RequiredFieldValidator();
req.ControlToValidate = this.ControlToValidate;
req.ErrorMessage = this.NotNullMessage;
form1 = new HtmlForm();
form1.Controls.Add(req);
base.OnInit(e);
}
你那样不会报错,但却什么功能也没有加
HTML显示
<span id="WebRev1" style="color:Red;display:none;">*</span>
而应该为
<span id="WebRev1" style="color:Red;display:none;">*</span>
<span id="ctl001" style="color:Red;display:none;">*</span>
{
RequiredFieldValidator req = new RequiredFieldValidator();
req.ControlToValidate = this.ControlToValidate;
req.ErrorMessage = this.NotNullMessage;
Literal l = new Literal();
l.Text = this.ErrorMessage;
this.Controls.Add(l);
this.Controls.Add(req);
base.OnPreRender(e); base.OnInit(e);
}
{
RequiredFieldValidator req = new RequiredFieldValidator();
req.ControlToValidate = this.ControlToValidate;
req.ErrorMessage = this.NotNullMessage;
form1 = new HtmlForm();
form1.Controls.Add(req);
base.OnLoad(e);
}
生成应该为
<span id="WebRev1" style="color:Red;display:none;">*</span><span id="ctl03" style="color:Red;visibility:hidden;">**</span>
==========
如果不大改控件的话,就只能生成这样.但是这样是可以的,我试过了.
因为
<span id="ctl03" style="color:Red;visibility:hidden;">**</span>
在webRev1里面
而用CS写的就是
<span id="WebRev1" style="color:Red;display:none;">*</span><span id="ctl03" style="color:Red;visibility:hidden;">**</span>
就可以显示了
<form id="form1" runat="server" enableviewstate="false">
<cc1:myregvalidtor id="MyRegValidtor1" runat="server" ControlToValidate="TextBox1" ErrorMessage="数字" NotNullMessage="不可空" ValidationExpression="\d*"></cc1:myregvalidtor>
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:Button ID="Button1" runat="server" Text="Button" />
</form>
<span id="MyRegValidtor1" style="color:Red;visibility:hidden;">数字<span id="ctl03" style="color:Red;visibility:hidden;">不可空</span></span>可以达到验证不为空或只许输入数字的功能.
ErrorMessage="数字" NotNullMessage="不可空"
可不"数字他不会出来啊"
因为
<span id="MyRegValidtor1" style="color:Red;visibility:hidden;">数字<span id="ctl03" style="color:Red;visibility:hidden;">不可空</span></span>
生成的
myregvalidtor1的innerHTML=数字<span id="ctl03" style="color:Red;visibility:hidden;">不可空</span>
可能是因为里面有Html代码所以不显示出来
=======
可以出来.
贴你的aspx页面的代码看看?
req.ControlToValidate = this.ControlToValidate;
req.ErrorMessage = this.NotNullMessage;
req.Display = this.Display;
Literal l = new Literal();
l.Text = this.ErrorMessage;
this.Controls.Add(l);
this.Controls.Add(req);<cc1:webRev ID="WebRev1" runat="server" Display="Dynamic" ControlToValidate="TextBox1" ErrorMessage="数字" NotNullMessage="不可空" ValidationExpression="\d*"></cc1:webRev>因为加多了一个Display="Dynamic" 就不显示了
但这个对我来说是很重要的
当TextBox1为空的时候并没有验证WebRev1
这时WebRev1的Display=none
虽然这个时候验证了里面的RequiredFieldValidator控件,他的Display=""
但是因为他包含在WebRev1中当WebRev1不显示的时候他自然就显示不出来了
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;
namespace AA
{
/// <summary>
/// MyRegValidtor 的摘要说明
/// </summary>
public class MyRegValidtor : System.Web.UI.WebControls.WebControl
{
public MyRegValidtor()
{
//
// TODO: 在此处添加构造函数逻辑
//
} protected override void OnInit(EventArgs e)
{
} protected override void OnDataBinding(EventArgs e)
{
base.OnDataBinding(e);
} protected override void OnPreRender(EventArgs e)
{ RequiredFieldValidator req = new RequiredFieldValidator();
req.ControlToValidate = this.ControlToValidate;
req.ErrorMessage = this.NotNullMessage;
req.Display = this.Display;
this.Controls.Add(req); RegularExpressionValidator reg = new RegularExpressionValidator();
reg.ControlToValidate = this.ControlToValidate;
reg.ErrorMessage = this.ErrorMessage;
reg.ValidationExpression = this.ValidationExpression;
reg.Display = this.Display;
this.Controls.Add(reg);
} public string ErrorMessage
{
get
{
return ViewState["ErrorMessage"] != null ? (string)ViewState["ErrorMessage"] : "";
} set
{
ViewState["ErrorMessage"] = value;
}
} public string ValidationExpression
{
get
{
return ViewState["ValidationExpression"] != null ? (string)ViewState["ValidationExpression"] : "";
} set
{
ViewState["ValidationExpression"] = value;
}
}
public string ControlToValidate
{
get
{
return ViewState["ControlToValidate"] != null ? (string)ViewState["ControlToValidate"] : "";
} set
{
ViewState["ControlToValidate"] = value;
}
} public ValidatorDisplay Display
{
get
{
return ViewState["Display"] != null ? (ValidatorDisplay)ViewState["Display"] : ValidatorDisplay.None;
} set
{
ViewState["Display"] = value;
}
} public string NotNullMessage
{
get
{
return ViewState["NotNullMessage"] != null ? (string)ViewState["NotNullMessage"] : "";
} set
{
ViewState["NotNullMessage"] = value;
}
} }
}