0

createchildcontrols メソッドで多数のリテラル コントロールをレンダリングするカスタム コントロールがあります。以下のように(ここで除外していないリテラルコントロールの他の行が追加されています)

this.Controls.Add(new LiteralControl(string.Format("<input type=\"text\" style=\"display:none\" value=\"{0}\" id=\"{1}\" name=\"{1}\" />", MediaId.ToString(), this.UniqueID)));

次に、クラスの先頭に [ValidationProperty("myprop")] を追加して、このテキスト ボックスを検証しようとしています。基本的に、テキストボックスに入力された値に対して検証する必要があります。myprop プロパティは次のとおりです。

public string myprop
    {
        get
        {
            Control ctrl = this.FindControl(this.UniqueID);
            string txt = ((TextBox)ctrl).Text;

            try
            {
                MediaId = Convert.ToInt32(txt);
            }
            catch { MediaId = 0; }
            return txt;
        }
    }

残念ながら、findcontrolはテキストボックスをまったく見つけられません。.netに関する限り、テキストボックスではなくリテラルコントロールであるためだと思います

確かに、これを行うために createchildcontrols を変更できます

        TextBox tb = new TextBox();
        tb.Text = this.MediaId.ToString();
        tb.ID = this.UniqueID;
        this.Controls.Add(tb);

しかし、私がやっていることの他の制限のために、他の場所でさらに多くのものを変更する必要があります..

リテラル内にレンダリングされたテキストボックスを見つけるためにfindcontrolを取得する方法、または別の方法はありますか?

ありがとう

ナット

4

1 に答える 1

0

残念ながら、findcontrolはテキストボックスをまったく見つけられません。.netに関する限り、テキストボックスではなくリテラルコントロールであるためだと思います

それは正しいです。テキストボックスのような他のコントロールを使用する必要があります。

于 2010-05-04T14:37:26.640 に答える