2

私はシンプルなフォームを持っています。1 つのテキストボックスとボタンとしましょう。

これらの項目が aspx ページに配置されている場合、それらは自動的に *.designer.cs ファイルに追加され、私の C# コード ビハインドで参照できます。それが想定されているように。

これらのアイテムを取得して FormView コントロール内に配置すると、問題が発生します。その時点で、それらのすべてのトレースが designer.cs ファイルから削除され、これらのコントロールを使用して記述されたコードで「現在のコンテキストに存在しません」というエラーが発生します。FormView コントロール自体は、デザイナーのコード ビハインドに残されます。それらを再度追加すると、それらは固執しません。designer.cs を削除して再作成すると、コントロールなしで再作成されます。

手がかりはありますか?

4

3 に答える 3

2

これに対する別のアプローチとして、1 つの EditItemTemplate (またはいずれかのテンプレート) のみを扱う場合は、FormView から継承し、TemplateInstance 属性TemplateInstance.Singleに設定してオーバーライドします。このような:

public class FormView : System.Web.UI.WebControls.FormView
{
  [Browsable(false), 
  DefaultValue((string)null), 
  PersistenceMode(PersistenceMode.InnerProperty), 
  TemplateContainer(typeof(FormView), BindingDirection.TwoWay),
  TemplateInstance(TemplateInstance.Single)]
  public override ITemplate EditItemTemplate
  {
    get { return base.EditItemTemplate; }
    set { base.EditItemTemplate = value; }
  }
}

ページでその FormView コントロールを使用すると、EditItemTemplate のコントロールがデザイナーに表示され、コード ビハインドでも直接アクセスできます。

于 2010-02-11T00:37:21.227 に答える
1

私は少し違った答えを探してそれを理解しました。アイテムはFormViewコントロールにあるため、FindControlを使用する必要があります。例を参照してください:

post.Title =((TextBox)FormView1.FindControl( "txtTitle"))。Text;

于 2010-02-11T00:05:39.687 に答える
0

コントロールを FormView に追加する場合は、 ItemTemplate を使用し必要なコントロールを itemTemplate にドロップします。その後、コード ビハインドからこれらのコントロールにアクセスできます。

ここにサンプルがあります

<asp:FormView >
    <ItemTemplate id="MyControl" runat="server">

      <asp:linkbutton id="Edit" text="Edit"
              commandname="Edit" runat="server"/> 
      <asp:textbox id="FirstNameTextBox"
              text='<%# Bind("FirstName") %>'

    </ItemTemplate>
</asp:FormView>

コントロールとその値にアクセスするには、次のようなものです

TextBox firstNameTextBox = ((TextBox)FormView1.FindControl("FirstNameTextBox")).Text;

string firstName = firstNameTextBox.Text;

以下は、あなたを始めるための良い記事です


お役に立てれば

于 2010-02-11T00:00:11.190 に答える