1

Web アプリケーションで 2 つのユーザー コントロールを使用しています。別のユーザー コントロールを介して、ユーザー コントロールからラベル テキストを読み取りたいです。どうすれば読めますか?

4

3 に答える 3

1

コードをリファクタリングし、別の UI コントロールのラベルの内容に依存しないようにする必要があります。そのユーザー コントロールで行うのと同じ方法でその値を取得するか、コードの重複を避けるために別のクラスでその機能を抽出し、両方の場所から呼び出します。

ただし、この既存のコードに固執しない場合は、インターフェイスを作成し、外部コードから呼び出さないすべての UserControls 機能をキャプチャする必要があります (この場合は、ラベル テキストを返す)。次に、外部から呼び出す必要があるユーザー コントロールにそのインターフェイスを実装します。その後は、コントロール インスタンスを検索するだけです。すべての Page 子コントロールを列挙することでそれを行うことができます。以下は、コントロールがラベル テキストを返さなければならないことを定義する単純なインターフェイスのコード例と、コントロール ツリーでユーザー コントロールを名前で検索するクラスです。

  public interface IUserControl
  {
    string LabelText();
  }

  public class PageUserControls
  {
    private Page parentPage;

    public PageUserControls(Page myParentPage)
    {
      this.parentPage = myParentPage;
    }

    private IEnumerable<Control> EnumerateControlsRecursive(Control parent)
    {
      foreach (Control child in parent.Controls)
      {
        yield return child;
        foreach (Control descendant in EnumerateControlsRecursive(child))
          yield return descendant;
      }
    }

    public IUserControl GetControl(string controlName)
    {
      foreach (Control cnt in EnumerateControlsRecursive(this.parentPage))
      {
        if (cnt is IUserControl && (cnt as UserControl).AppRelativeVirtualPath.Contains(controlName))
          return cnt as IUserControl;
      }
      return null;      
    }
  }

次に、その Label を保持するユーザー コントロールにそのインターフェイスを実装する必要があります。

  public partial class WebUserControl1 : System.Web.UI.UserControl, IUserControl
  {
    public string LabelText()
    {
      return Label1.Text;
    }
  }

最後に、別のユーザー コントロールから使用します。

  PageUserControls puc = new PageUserControls(this.Page);
  string txt1 = puc.GetControl("WebUserControl1.ascx").LabelText();

ところで。メソッド EnumerateControlsRecursive は SO answer からFinding all controls in an ASP.NET Panel? に採用されていますか?

于 2012-04-23T08:41:15.250 に答える
0

MSDNのこの記事をご覧ください。

つまり、ID を知っていれば、他のコントロールにアクセスできます。

于 2012-04-23T07:21:58.503 に答える
0

このように使用...

ユーザー コントロールにパブリック プロパティを 1 つ作成し、その値が必要な場所でユーザー コントロール名を使用してそのプロパティを呼び出します。

于 2012-04-23T07:27:02.577 に答える