Qualcuno può mostrarmi un codice ASP.NET assolutamente minimo per capire Eval()
e Bind()
?
È meglio che tu mi fornisca due distinti frammenti di codice o collegamenti web.
Per i controlli di sola lettura sono uguali. Per l’associazione dati bidirezionale, utilizzando un’origine dati in cui si desidera aggiornare, inserire, ecc. Con l’associazione dichiarativa, è necessario utilizzare Bind
.
Immagina per esempio un GridView con ItemTemplate
e EditItemTemplate
. Se usi Bind
o Eval
ItemTemplate
, non ci saranno differenze. Se si utilizza Eval
in EditItemTemplate
, il valore non potrà essere passato al metodo di Update
del DataSource
cui è collegata la griglia.
AGGIORNAMENTO: ho trovato questo esempio:
<%@ Page Language="C#" %> Data binding demo
Ed ecco la definizione di una class personalizzata che funge da origine dati dell’object:
public class CustomDataSource { public class Model { public string Name { get; set; } } public IEnumerable Select() { return new[] { new Model { Name = "some value" } }; } public void Update(string Name) { // This method will be called if you used Bind for the TextBox // and you will be able to get the new name and update the // data source accordingly } public void Update() { // This method will be called if you used Eval for the TextBox // and you will not be able to get the new name that the user // entered } }
Darin Dimitrov ha risposto alla domanda perfettamente, ma dal momento che ASP.NET 4.5 , ora c’è un modo migliore per impostare questi binding per sostituire * Eval()
e Bind()
, sfruttando i binding fortemente tipizzati .
* Nota: questo funzionerà solo se non stai usando un SqlDataSource
o un anonymous object
. Richiede un object fortemente tipizzato (da un modello EF o qualsiasi altra class).
Questo snippet di codice mostra come Eval
e Bind
verrebbero utilizzati per un controllo ListView
( InsertItem
richiede Bind
, come spiegato da Darin Dimitrov sopra, e ItemTemplate
è di sola lettura (quindi sono etichette), quindi è sufficiente un Eval
):
Title:
Description:
Title:
Description:
Da ASP.NET 4.5+ , i controlli con associazione a dati sono stati estesi con una nuova proprietà ItemType
, che punta al tipo di object che si assegna alla propria origine dati.
Picture
è il tipo di object fortemente (dal modello EF). Sostituiamo quindi:
Bind(property) -> BindItem.property Eval(property) -> Item.property
Così questo:
<%# Bind("Title") %> <%# Bind("Description") %> <%# Eval("Title") %> <%# Eval("Description") %>
Diventerebbe questo:
<%# BindItem.Title %> <%# BindItem.Description %> <%# Item.Title %> <%# Item.Description %>
Vantaggi rispetto a Eval & Bind :
Fonte : da questo eccellente libro
grdexcel.Visible = true; Response.ClearContent(); Response.Buffer = true; Response.AddHeader("content-disposition", string.Format("attachment; filename={0}", "Registration.xls")); Response.ContentType = "application/ms-excel"; StringWriter sw = new StringWriter(); HtmlTextWriter htw = new HtmlTextWriter(sw); grdexcel.AllowPaging = false; Fill_Grid(); HtmlForm htmf = new HtmlForm(); htmf.Attributes.Add("runat", "server"); htmf.Controls.Add(grdexcel); grdexcel.RenderControl(htw); Response.Write(sw.ToString()); Response.End(); grdexcel.Visible = false;
Tihor