2010-02-10 4 views
2

J'ai un formulaire simple. Disons une zone de texte et un bouton..Net designer.cs pas mis à jour lorsque le contrôle est dans ItemTemplate

Si ces éléments sont placés sur la page aspx, ils sont automatiquement ajoutés au fichier * .designer.cs et peuvent être référencés dans mon code C#. Tout comme c'est supposé le faire.

Le problème se produit lorsque je prends ces éléments et les place dans un pour un contrôle FormView. À ce stade, toutes les traces d'entre eux sont supprimées du fichier designer.cs et tout code écrit à l'aide de ces contrôles donne désormais l'erreur "n'existe pas dans le contexte actuel". Le contrôle FormView lui-même est laissé dans le code du concepteur derrière. Si je les rajoute, ils ne colleront pas. Si je supprime le designer.cs et le laisse refaire, il se refait juste sans les contrôles.

Des indices?

Répondre

0

Si vous souhaitez ajouter des contrôles à un formulaire, utilisez ItemTemplate et déposez les contrôles souhaités sur itemTemplate. Ensuite, vous pouvez accéder à ces contrôles à partir du code derrière.

Voici un exemple

<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> 

Pour accéder à un contrôle et sa valeur, quelque chose comme

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

string firstName = firstNameTextBox.Text; 

Après est bon article pour vous aider à aller


Hope this helps

+0

Merci pour la réponse rapide. Cependant, j'ai mis cette partie dans la question mais elle l'a enlevée puisqu'elle n'était pas marquée comme code. – Anthony

+0

avez-vous mis des contrôles à l'intérieur des champs de modèle? –

1

I figured it out en recherchant des réponses un peu différemment. Vous devez utiliser FindControl puisque les éléments sont dans le contrôle FormView. Voir l'exemple:

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

0

Une autre approche pour cela, si vous avez seulement affaire à 1 EditItemTemplate (ou quel que soit le modèle) est d'hériter de FormView et de redéfinir le TemplateInstance attribute à TemplateInstance.Single. Comme ceci:

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; } 
    } 
} 

Si vous utilisez ce contrôle FormView dans votre page, les contrôles dans le EditItemTemplate apparaîtra dans votre concepteur, et être directement accessible dans le code-behind ainsi.

Questions connexes