Informazioni su ASP.NET Eval () e Bind ()

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   
<%# Eval("Name") %>

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 :

    • IntelliSense può trovare la proprietà corretta dell’object con cui stai lavorando inserisci la descrizione dell'immagine qui
    • Se la proprietà viene rinominata / eliminata, si verificherà un errore prima che la pagina venga visualizzata nel browser
    • Gli strumenti esterni (richiede versioni complete di VS) rinomineranno correttamente l’elemento nel markup quando si rinomina una proprietà sul proprio object

    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