<% # Eval ("Stato")% > oppure <% # DataBinder.Eval (Container.DataItem, "state")% >
-
06-07-2019 - |
Domanda
Qual è la differenza tra avere
<%# Eval("State") %>
nella tua pagina aspx
, anziché
<%# DataBinder.Eval(Container.DataItem, "State") %>
nella tua pagina aspx
?
Soluzione
Eval (" State ") è una forma semplificata della sintassi DataBinder.Eval (Container.DataItem, " State "). Funziona solo all'interno dei controlli dei modelli associati ai dati.
Per ulteriori informazioni, vedere la documentazione MSDN .
Altri suggerimenti
Non c'è differenza. "Eval" Il metodo è solo una scorciatoia per il metodo DataBinder.Eval (Container.DataItem, " blah ").
Ci sono molte differenze tra <% # Eval% >
e <% # DataBinder.Eval% >
sotto le copertine, anche se < a href = "https://msdn.microsoft.com/en-us/library/ms178366.aspx#Anchor_1" rel = "nofollow"> la documentazione afferma che l'utilizzo di Eval
( TemplateControl.Eval
per l'esattezza) chiama in realtà DataBinder.Eval
e il loro compito è fare esattamente lo stesso lavoro.
Questo è corretto, ma usando solo Eval
significa che ASP.NET stesso risolve l'oggetto che è databound. Lo fa internamente con uno stack in cui gli elementi vengono aggiunti quando viene chiamato Control.DataBind ()
. Il trucco è che ciò accade solo se la proprietà Page
del controllo non è null
in quel punto.
Se lo stack gestito Page
non è aggiornato quando si arriva al punto in cui DataItem
deve essere risolto, Page.GetDataItem ( )
genererà un'eccezione con un messaggio come
I metodi di database come
Eval ()
,XPath ()
eBind ()
possono essere usati solo nel contesto di un database controllo.
DataBinder.Eval
funziona ancora in quelle circostanze perché gli si fornisce l'oggetto target manualmente, quindi ASP.NET non ha bisogno di alcuna soluzione da solo.
il metodo Eval è solo una scorciatoia della lettera
Ho visto il seguente codice
<%# (DataBinder.Eval(Container.DataItem, "ApplicationId").ToString() == "-1" ? "N/A" : Eval("ApplicationId").ToString()) %>
Quindi immagino che siano leggermente diversi.