控件在ItemTemplate中时,.Net designer.cs未更新

时间:2010-02-10 23:53:47

标签: c# designer itemtemplate

我有一个简单的表格。假设有一个文本框和一个按钮。

如果这些项目放在aspx页面上,它们会自动添加到* .designer.cs文件中,并且可以在我的C#代码后面引用它们。就像它应该的那样。

当我将这些项目放在一个FormView控件中时,会出现问题。此时,它们的所有痕迹都将从designer.cs文件中删除,使用这些控件编写的任何代码现在都会显示“当前上下文中不存在”错误。 FormView控件本身留在后面的设计器代码中。如果我重新添加它们就不会坚持下去。如果我删除了designer.cs并让它重新制作,它就会在没有控件的情况下重新制作。

任何线索?

3 个答案:

答案 0 :(得分:1)

我通过稍微不同的方式搜索答案来解决这个问题。您必须使用FindControl,因为项目在FormView控件中。见例:

posting.Title =((TextBox)FormView1.FindControl(“txtTitle”))。Text;

答案 1 :(得分: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;

以下是让你前进的好文章


希望这有帮助

答案 2 :(得分:0)

另一种方法是,如果您只处理1个EditItemTemplate(或任何模板)将从FormView继承并覆盖将TemplateInstance attribute设置为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中的控件将出现在您的设计器中,并且也可以在代码隐藏中直接访问。