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

时间:2015-09-01 11:52:35

标签: c# asp.net user-controls custom-controls

我正在构建一个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也没有用。

有人可以帮我这个吗?

由于

2 个答案:

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