我正在构建一个Web控件来隐藏SSN编号等输入值。
我已经编写了控件,但是,我可以在post back上检索输入值。
[DefaultProperty("Text")]
[ToolboxData("<{0}:Mask runat=server></{0}:Mask>")]
public class Mask : WebControl, INamingContainer {
const string INPUT_PREFIX = "_input";
[Bindable(true)]
[Category("Appearance")]
[DefaultValue("")]
public string Text {
get {
return text;
}
set {
text = value;
}
}
protected override void RenderContents(HtmlTextWriter output) {
output.AddAttribute(HtmlTextWriterAttribute.Id, this.ID);
output.RenderBeginTag(HtmlTextWriterTag.Div);
output.AddAttribute(HtmlTextWriterAttribute.Type, "text");
output.AddAttribute(HtmlTextWriterAttribute.Id, this.ID + INPUT_PREFIX);
output.AddAttribute(HtmlTextWriterAttribute.Value, this.Text);
output.RenderBeginTag(HtmlTextWriterTag.Input);
output.RenderEndTag();
output.RenderEndTag();
}
protected override void Render(HtmlTextWriter writer) {
this.RenderContents(writer);
}
}
我认为我有一切正确。我已经尝试实现ipostbackdatahandler也没有用。
有人可以帮我这个吗?
由于
答案 0 :(得分:0)
尝试更改
public string Text
{
get
{
return text;
}
set
{
text = value;
}
}
为:
public string Text
{
get
{
string text = (string)ViewState["Text"];
return text ?? string.Empty;
}
set
{
ViewState["Text"] = value;
}
}
答案 1 :(得分:0)
我能够在以下位置检索值:
public virtual bool LoadPostData(string postDataKey, NameValueCollection postCollection) {
text = postCollection[postDataKey + INPUT_PREFIX];
return false;
}
并将控件注册为Requires Postback
protected override void OnInit(EventArgs e) {
Page.RegisterRequiresPostBack(this);
}