Sto utilizzando la nuova funzionalità Model Binding per WebForms, con .NET Framework versione 4.5.1. Quello che spero di ottenere è di escludere di alcuni dei binding a due vie, in base ad alcune condense.Modello Web Form Binding: come omettere il binding per il controllo non visibile?
Mi piace molto il (speriamo ora famoso) blog post series, by Scott Guthrie. A implementare una pagina di modifica utilizzando il numero di approccio a due da Web Forms Model Binding Part 3: Updating and Validation (ASP.NET 4.5 Series)
Ecco quello che ho: (semplificato, in ElementEdit.aspx):
<asp:FormView runat="server" ID="FormViewElement" RenderOuterTable="false" DefaultMode="Edit" DataKeyNames="ElementId"
ItemType="Business.Entities.Element"
SelectMethod="GetElement"
UpdateMethod="UpdateElement">
<EditItemTemplate>
<asp:Panel runat="server" DefaultButton="ButtonSpeichern">
<fieldset>
/*some databound controls*/
<asp:Panel runat="server" Visible="<%# !Item.CurrentElementData.SomeCondition() %>">
/*more databound controls*/
</asp:Panel>
/*the submit button ("ButtonSpeichern")*/
</fieldset>
</asp:Panel>
</EditItemTemplate>
</asp:FormView>
Come si vede, c'è una condizione per la visibilità sul pannello interno avvolto con "più controlli di dati". Questi dovrebbero legare solo quando i conditioni sono veri e sono visibili. Altrimenti non dovrebbero legare e non cambiare i valori.
L'aggiornamento funziona come nel post di Scott (semplificato, in xxPage.cs), che è una classe base generica di tipo Elemento:
protected virtual bool UpdateEntity(int id) {
T existing = UseCase.GetItem(id); //gets the original element
TryUpdateModel(existing); //SHOULD NOT update the invisible databound controls, but does
ValidateExistingEntity(existing);
if (ModelState.IsValid) {
UseCase.Update(existing);
return true;
}
ShowErrors(ModelState);
return false;
}
Qui, dopo la chiamata a TryUpdateModel()
, i controlli invisibili hanno aggiornato il modello, che è quello che volevo evitare.
Come omettere dinamicamente l'associazione dati per alcuni elementi, in base a una condizione, anche se impostarli invisibili non aiuta?
UPDATE: Ora ho creare una soluzione alternativa, che risolve il problema per me oggi: ho semplicemente creato due pagine aspx con il loro rispettivo codice dietro. A seconda dei campi che l'utente deve modificare con successo, chiamo la pagina appropriata in primo luogo.
Questo, tuttavia, non risolve il problema di fondo, che è il databinding condizionale.
chiunque sia interessato a partecipare a [webforms] (http://stackoverflow.com/documentation/webforms)? –