.Net designer.cs не обновляется, когда элемент управления находится в ItemTemplate - PullRequest
2 голосов
/ 11 февраля 2010

У меня есть простая форма. Скажем, одно текстовое поле и кнопка.

Если эти элементы размещены на странице aspx, они автоматически добавляются в файл * .designer.cs, и на них можно ссылаться в моем коде C #. Как и должно быть.

Проблема возникает, когда я беру эти элементы и помещаю их в элемент управления FormView. В этот момент все их следы удаляются из файла designer.cs, и любой код, написанный с использованием этих элементов управления, теперь выдает ошибку «не существует в текущем контексте». Сам элемент управления FormView оставлен в коде конструктора. Если я снова добавлю их, они не будут придерживаться. Если я удаляю файл designer.cs и позволяю ему переделывать, он просто переделывается без элементов управления.

Есть какие-нибудь подсказки?

Ответы [ 3 ]

1 голос
/ 11 февраля 2010

Я понял это, ища ответы немного по-другому. Вы должны использовать FindControl, так как элементы находятся в элементе управления FormView. Смотрите пример:

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

0 голосов
/ 11 февраля 2010

Другой подход к этому, если вы имеете дело только с 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 появятся в вашем конструкторе и также будут напрямую доступны в коде позади.

0 голосов
/ 11 февраля 2010

Если вы хотите добавить элементы управления в 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;

Ниже приводится хорошая статья, которая поможет вам.


Надеюсь, это поможет

...