从 asp.net 自定义 Web 控件中检索输入值

Retrieve input value from asp.net custom web control

我正在构建一个 Web 控件来隐藏 SSN 号码等输入值。

我写了控件,但是,我可以在 post 上取回输入值。

[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 也没有用。

有人可以帮我解决这个问题吗?

谢谢

尝试改变

    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;
      }
  }

我能够检索到以下值:

 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);
    }