2009-06-12 4 views
0

J'ai cherché autour de trouver la meilleure option de le faire. Fondamentalement, je veux faire une liaison de données bidirectionnelle de plusieurs contrôles (zone de texte, liste déroulante, case à cocher, etc) à une seule instance de classe/entité personnalisée, à savoir: Personne.ASP.Net - Liaison de données bidirectionnelle d'une seule entité - Options, meilleure façon ... rouler la vôtre?

Il semble, la (seule?) Façon de le faire est d'utiliser un comme ceci:

<asp:FormView ID="FormView1" runat="server" DataKeyNames="OrderID" 
     DataSourceID="SqlDataSource1" DefaultMode="Edit"> 
     <EditItemTemplate> 
      OrderID: 
      <asp:Label ID="OrderIDLabel1" runat="server" Text='<%# Eval("OrderID") %>' /> 
      <br /> 
      CustomerID: 
      <asp:DropDownList ID="CustomerIDDropDownList" runat="server" 
      DataValueField='CustomerID' DataSourceID="CustomerDataSource" 
      DataTextField="CompanyName" 
      SelectedValue='<%# Bind("CustomerID") %>' 
      /> 
      EmployeeID: 
      <asp:TextBox ID="EmployeeIDTextBox" runat="server" 
      Text='<%# Bind("EmployeeID") %>' /> 
      <br /> 

Quelques questions:
- Ceci est limité à l'aide d'un contrôle ObjectDataSource (ex: peut » t juste utiliser une instance de la classe désirée dans le code derrière)
- Vous oblige à définir un second modèle en lecture seule (mise en page probablement identique) .... serait bien d'avoir un mécanisme qui pourrait rendre intelligemment une lecture seule vue dérivée du modèle d'édition.
- La déclaration contraignante = '<% # Bind ("EmployeeID")%>' est faiblement typé, si vulnérable aux fautes d'orthographe - etc

Ma première question que je suppose, est un asp: FormView le seul moyen pour ASP.Net de faire une liaison de données déclarative d'une seule entité? Deuxièmement, dans quelle mesure serait-il possible de rouler à la main une sorte de mécanisme de reliure à deux voies? Je suppose que ça devrait être basé sur la réflexion, mais je pourrais vivre avec ça. Des recommandations sur la façon de déclarer les relations de liaison dans la page ASPX? Est-ce que la bonne façon de ressembler:
Text = '<% # MySuperDuperBind ("EmployeeID")%>'

Et puis quelque part (? Où) ma mise en œuvre de MySuperDuperBind sera appelé comme la page est rendue .... comment cela est fait est un peu au-delà de moi cependant. Et si je veux rendre en lecture seule, je peux appeler une fonction secondaire qui supprimera le contrôle d'interface utilisateur éditable du formulaire et le remplacer par la version en lecture seule correspondante (ie: une Textbox est remplacée par un Label).

Une autre voie alternative est de se éloigner de webforms et aller à une solution de templating côté client, comme cette très belle solution à la recherche:
http://weblogs.asp.net/dwahlin/archive/2009/05/03/using-jquery-with-client-side-data-binding-templates.aspx

Cependant, je n'ai aucune idée comment écrire les asp.net webservices correctement afin de récupérer et enregistrer des données dans ce type d'architecture.

Des idées?

Répondre

1

est un asp: FormView la seule façon ASP.Net faire déclarative databinding d'une seule entité?

Il y a aussi DetailsView mais il a les mêmes problèmes.

J'ai surtout abandonné la liaison de données bidirectionnelle. C'est génial pour le prototypage et cela me donne 80-90% du chemin vers une solution complète, mais les 10-20% restants sont un cauchemar. La liaison d'un objet non trivial semble toujours impliquer autant de gestionnaires d'événements pour personnaliser le comportement que je ressens comme un code spaghetti.

J'ai généralement deux méthodes:

MapEntityToView(entity) 
MapViewToEntity(entity) 

que j'appelle pour afficher l'entité et de remplir de la page, respectivement. Cela peut être fastidieux d'écrire mais je n'ai pas à me battre avec des problèmes de liaison de données.

J'utilise beaucoup la liaison unidirectionnelle pour les pages en lecture seule et l'affichage des éléments dans les contrôles de liste.

+0

Malheureusement, je suis le vôtre comme la bonne réponse. Voir aussi: http://stackoverflow.com/questions/2435185/not-possible-to-load-dropdownlist-on-formview-from-code-behind et http://stackoverflow.com/questions/2470533/automapper-a-viable-alternative-à-deux-manière-databinding-using-a-formview – tbone

Questions connexes