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