2

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

如果将这些项目放在 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

I figured it out by searching for answers a little differently. You have to use FindControl since the items are in the FormView control. See example:

posting.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 回答