我有一个简单的表格。假设有一个文本框和一个按钮。
如果这些项目放在aspx页面上,它们会自动添加到* .designer.cs文件中,并且可以在我的C#代码后面引用它们。就像它应该的那样。
当我将这些项目放在一个FormView控件中时,会出现问题。此时,它们的所有痕迹都将从designer.cs文件中删除,使用这些控件编写的任何代码现在都会显示“当前上下文中不存在”错误。 FormView控件本身留在后面的设计器代码中。如果我重新添加它们就不会坚持下去。如果我删除了designer.cs并让它重新制作,它就会在没有控件的情况下重新制作。
任何线索?
答案 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中的控件将出现在您的设计器中,并且也可以在代码隐藏中直接访问。