IBindableTemplate Schnittstelle

Definition

Ermöglicht datengebundenen ASP.NET-Steuerelementen, z. B. DetailsView und FormView, automatische Bindungen an ein ASP.NET-Datenquellensteuerelement in auf Vorlagen basierenden Inhaltsabschnitten.

public interface class IBindableTemplate : System::Web::UI::ITemplate
public interface IBindableTemplate : System.Web.UI.ITemplate
type IBindableTemplate = interface
    interface ITemplate
Public Interface IBindableTemplate
Implements ITemplate
Abgeleitet
Implementiert

Beispiele

Im folgenden Codebeispiel wird veranschaulicht, wie ein FormView Steuerelement vorlagenbasierte Inhalte deklarativ definieren kann, an Daten binden kann, die von einem SqlDataSource Steuerelement bereitgestellt werden, und vorhandene Datensätze anzeigen und bearbeiten. Der ASP.NET Parser analysiert den vorlagenbasierten Inhalt und erstellt ein IBindableTemplate Objekt zur Laufzeit, das Werte aus dem SqlDataSource Steuerelement an die datenbindungsbereiche binden kann, die in der Vorlage definiert sind, durch eine einmalige ASP.NET Datenbindungssyntax () und eine Syntax für die Zwei-Wege-Datenbindung () (<%# Eval("fieldname") %>``<%# Bind("fieldname") %>).

Wichtig

Dieses Steuerelement verfügt über ein Textfeld, das Benutzereingaben akzeptiert, was eine potenzielle Sicherheitsrisiken ist. Standardmäßig stellen ASP.NET-Webseiten sicher, dass Benutzereingaben keine Skript- oder HTML-Elemente enthalten. Weitere Informationen finden Sie unter Übersicht über Skriptangriffe.


<%@ Page language="C#" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">

  void EmployeeFormView_ItemUpdating(Object sender, FormViewUpdateEventArgs e)
  {

    // Validate the field values entered by the user. This
    // example determines whether the user left any fields
    // empty. Use the NewValues property to access the new 
    // values entered by the user.
    ArrayList emptyFieldList = ValidateFields(e.NewValues);

    if (emptyFieldList.Count > 0)
    {

      // The user left some fields empty. Display an error message.
      
      // Use the Keys property to retrieve the key field value.
      String keyValue = e.Keys["EmployeeID"].ToString();

      MessageLabel.Text = "You must enter a value for each field of record " +
        keyValue + ".<br/>The following fields are missing:<br/><br/>";

      // Display the missing fields.
      foreach (String value in emptyFieldList)
      {
        // Use the OldValues property to access the original value
        // of a field.
        MessageLabel.Text += value + " - Original Value = " + 
          e.OldValues[value].ToString() + "<br />";
      }

      // Cancel the update operation.
      e.Cancel = true;

    }
    else
    {
      // The field values passed validation. Clear the
      // error message label.
      MessageLabel.Text = "";
    }

  }

  ArrayList ValidateFields(IOrderedDictionary list)
  {
    
    // Create an ArrayList object to store the
    // names of any empty fields.
    ArrayList emptyFieldList = new ArrayList();

    // Iterate though the field values entered by
    // the user and check for an empty field. Empty
    // fields contain a null value.
    foreach (DictionaryEntry entry in list)
    {
      if (entry.Value == String.Empty)
      {
        // Add the field name to the ArrayList object.
        emptyFieldList.Add(entry.Key.ToString());
      }
    }

    return emptyFieldList;
  }

  void EmployeeFormView_ModeChanging(Object sender, FormViewModeEventArgs e)
  {
    if (e.CancelingEdit)
    {
      // The user canceled the update operation.
      // Clear the error message label.
      MessageLabel.Text = "";
    }
  }

</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
  <head runat="server">
    <title>FormView Example</title>
</head>
<body>
    <form id="form1" runat="server">
        
      <h3>FormView Example</h3>
                       
      <asp:formview id="EmployeeFormView"
        datasourceid="EmployeeSource"
        allowpaging="true"
        datakeynames="EmployeeID"
        headertext="Employee Record"
        emptydatatext="No employees found."
        onitemupdating="EmployeeFormView_ItemUpdating"
        onmodechanging="EmployeeFormView_ModeChanging"  
        runat="server">
        
        <headerstyle backcolor="CornFlowerBlue"
          forecolor="White"
          font-size="14"
          horizontalalign="Center"  
          wrap="false"/>
        <rowstyle backcolor="LightBlue"
          wrap="false"/>
        <pagerstyle backcolor="CornFlowerBlue"/>

        <itemtemplate>
          <table>
            <tr>
              <td rowspan="6">
                <asp:image id="EmployeeImage"
                  imageurl='<%# Eval("PhotoPath") %>'
                  alternatetext='<%# Eval("LastName") %>' 
                  runat="server"/>
              </td>
              <td colspan="2">
                    
              </td>
            </tr>
            <tr>
              <td>
                <b>Name:</b>
              </td>
              <td>
                <%# Eval("FirstName") %> <%# Eval("LastName") %>
              </td>
            </tr>
            <tr>
              <td>
                <b>Title:</b>
              </td>
              <td>
                <%# Eval("Title") %>
              </td>
            </tr>
            <tr>
              <td>
                <b>Hire Date:</b>                 
              </td>
              <td>
                <%# Eval("HireDate","{0:d}") %>
              </td>
            </tr>
            <tr style="height:150; vertical-align:top">
              <td>
                <b>Address:</b>
              </td>
              <td>
                <%# Eval("Address") %><br/>
                <%# Eval("City") %> <%# Eval("Region") %>
                <%# Eval("PostalCode") %><br/>
                <%# Eval("Country") %>   
              </td>
            </tr>
            <tr>
              <td colspan="2">
                <asp:linkbutton id="Edit"
                  text="Edit"
                  commandname="Edit"
                  runat="server"/> 
              </td>
            </tr>
          </table>       
        </itemtemplate>
        <edititemtemplate>
          <table>
            <tr>
              <td rowspan="6">
                <asp:image id="EmployeeEditImage"
                  imageurl='<%# Eval("PhotoPath") %>'
                  alternatetext='<%# Eval("LastName") %>' 
                  runat="server"/>
              </td>
              <td colspan="2">
                    
              </td>
            </tr>
            <tr>
              <td>
                <b>Name:</b>
              </td>
              <td>
                <asp:textbox id="FirstNameUpdateTextBox"
                  text='<%# Bind("FirstName") %>'
                  runat="server"/>
                <asp:textbox id="LastNameUpdateTextBox"
                  text='<%# Bind("LastName") %>'
                  runat="server"/>
              </td>
            </tr>
            <tr>
              <td>
                <b>Title:</b>
              </td>
              <td>
                <asp:textbox id="TitleUpdateTextBox"
                  text='<%# Bind("Title") %>'
                  runat="server"/> 
              </td>
            </tr>
            <tr>
              <td>
                <b>Hire Date:</b>                 
              </td>
              <td>
                <asp:textbox id="HireDateUpdateTextBox"
                  text='<%# Bind("HireDate", "{0:d}") %>'
                  runat="server"/>
              </td>
            </tr>
            <tr style="height:150; vertical-align:top">
              <td>
                <b>Address:</b>
              </td>
              <td>
                <asp:textbox id="AddressUpdateTextBox"
                  text='<%# Bind("Address") %>'
                  runat="server"/>
                <br/>
                <asp:textbox id="CityUpdateTextBox"
                  text='<%# Bind("City") %>'
                  runat="server"/> 
                <asp:textbox id="RegionUpdateTextBox"
                  text='<%# Bind("Region") %>'
                  width="40"
                  runat="server"/>
                <asp:textbox id="PostalCodeUpdateTextBox"
                  text='<%# Bind("PostalCode") %>'
                  width="60"
                  runat="server"/>
                <br/>
                <asp:textbox id="CountryUpdateTextBox"
                  text='<%# Bind("Country") %>'
                  runat="server"/> 
              </td>
            </tr>
            <tr>
              <td colspan="2">
                <asp:linkbutton id="UpdateButton"
                  text="Update"
                  commandname="Update"
                  runat="server"/>
                <asp:linkbutton id="CancelButton"
                  text="Cancel"
                  commandname="Cancel"
                  runat="server"/> 
              </td>
            </tr>
          </table>       
        </edititemtemplate>
          
        <pagersettings position="Bottom"
          mode="Numeric"/> 
                  
      </asp:formview>
      
      <br/><br/>
      
      <asp:label id="MessageLabel"
          forecolor="Red"
          runat="server"/>
          
      <!-- This example uses Microsoft SQL Server and connects  -->
      <!-- to the Northwind sample database. Use an ASP.NET     -->
      <!-- expression to retrieve the connection string value   -->
      <!-- from the Web.config file.                            -->
      <asp:sqldatasource id="EmployeeSource"
        selectcommand="Select [EmployeeID], [LastName], [FirstName], [Title], [Address], [City], [Region], [PostalCode], [Country], [HireDate], [PhotoPath] From [Employees]"
        updatecommand="Update [Employees] Set [LastName]=@LastName, [FirstName]=@FirstName, [Title]=@Title, [Address]=@Address, [City]=@City, [Region]=@Region, [PostalCode]=@PostalCode, [Country]=@Country Where [EmployeeID]=@EmployeeID"
        connectionstring="<%$ ConnectionStrings:NorthWindConnectionString%>" 
        runat="server"/>
            
    </form>
  </body>
</html>

<%@ Page language="VB" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">

  Sub EmployeeFormView_ItemUpdating(ByVal sender As Object, ByVal e As FormViewUpdateEventArgs) Handles EmployeeFormView.ItemUpdating
  
    ' Validate the field values entered by the user. This
    ' example determines whether the user left any fields
    ' empty. Use the NewValues property to access the new 
    ' values entered by the user.
        Dim emptyFieldList As ArrayList = ValidateFields(e.NewValues)

    If emptyFieldList.Count > 0 Then

      ' The user left some fields empty. Display an error message.
      
      ' Use the Keys property to retrieve the key field value.
      Dim keyValue As String = e.Keys("EmployeeID").ToString()

      MessageLabel.Text = "You must enter a value for each field of record " & _
        keyValue & ".<br/>The following fields are missing:<br/><br/>"

      ' Display the missing fields.
      Dim value As String
      For Each value In emptyFieldList
      
        ' Use the OldValues property to access the original value
        ' of a field.
        MessageLabel.Text &= value & " - Original Value = " & _
          e.OldValues(value).ToString() & "<br />"
        
      Next

      ' Cancel the update operation.
      e.Cancel = True

    Else
    
      ' The field values passed validation. Clear the
      ' error message label.
      MessageLabel.Text = ""
      
    End If

  End Sub

  Function ValidateFields(ByVal list As IOrderedDictionary) As ArrayList
    
    ' Create an ArrayList object to store the
    ' names of any empty fields.
    Dim emptyFieldList As New ArrayList()

    ' Iterate though the field values entered by
    ' the user and check for an empty field. Empty
    ' fields contain a null value.
    Dim entry As DictionaryEntry
    
    For Each entry In list
    
      If entry.Value Is String.Empty Then
      
        ' Add the field name to the ArrayList object.
        emptyFieldList.Add(entry.Key.ToString())
        
      End If
      
    Next

    Return emptyFieldList
  
  End Function
  
  Sub EmployeeFormView_ModeChanging(ByVal sender As Object, ByVal e As FormViewModeEventArgs) Handles EmployeeFormView.ModeChanging
  
    If e.CancelingEdit Then
      
      ' The user canceled the update operation.
      ' Clear the error message label.
      MessageLabel.Text = ""
    
    End If
    
  End Sub
  
</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
  <head runat="server">
    <title>FormView Example</title>
</head>
<body>
    <form id="form1" runat="server">
        
      <h3>FormView Example</h3>
                       
      <asp:formview id="EmployeeFormView"
        datasourceid="EmployeeSource"
        allowpaging="true"
        datakeynames="EmployeeID"
        headertext="Employee Record"
        emptydatatext="No employees found."
        runat="server">
        
        <headerstyle backcolor="CornFlowerBlue"
          forecolor="White"
          font-size="14"
          horizontalalign="Center"  
          wrap="false"/>
        <rowstyle backcolor="LightBlue"
          wrap="false"/>
        <pagerstyle backcolor="CornFlowerBlue"/>

        <itemtemplate>
          <table>
            <tr>
              <td rowspan="6">
                <asp:image id="EmployeeImage"
                  imageurl='<%# Eval("PhotoPath") %>'
                  alternatetext='<%# Eval("LastName") %>' 
                  runat="server"/>
              </td>
              <td colspan="2">
                    
              </td>
            </tr>
            <tr>
              <td>
                <b>Name:</b>
              </td>
              <td>
                <%# Eval("FirstName") %> <%# Eval("LastName") %>
              </td>
            </tr>
            <tr>
              <td>
                <b>Title:</b>
              </td>
              <td>
                <%# Eval("Title") %>
              </td>
            </tr>
            <tr>
              <td>
                <b>Hire Date:</b>                 
              </td>
              <td>
                <%# Eval("HireDate","{0:d}") %>
              </td>
            </tr>
            <tr style="height:150; vertical-align:top">
              <td>
                <b>Address:</b>
              </td>
              <td>
                <%# Eval("Address") %><br/>
                <%# Eval("City") %> <%# Eval("Region") %>
                <%# Eval("PostalCode") %><br/>
                <%# Eval("Country") %>   
              </td>
            </tr>
            <tr>
              <td colspan="2">
                <asp:linkbutton id="Edit"
                  text="Edit"
                  commandname="Edit"
                  runat="server"/> 
              </td>
            </tr>
          </table>       
        </itemtemplate>
        <edititemtemplate>
          <table>
            <tr>
              <td rowspan="6">
                <asp:image id="EmployeeEditImage"
                  imageurl='<%# Eval("PhotoPath") %>'
                  alternatetext='<%# Eval("LastName") %>' 
                  runat="server"/>
              </td>
              <td colspan="2">
                    
              </td>
            </tr>
            <tr>
              <td>
                <b>Name:</b>
              </td>
              <td>
                <asp:textbox id="FirstNameUpdateTextBox"
                  text='<%# Bind("FirstName") %>'
                  runat="server"/>
                <asp:textbox id="LastNameUpdateTextBox"
                  text='<%# Bind("LastName") %>'
                  runat="server"/>
              </td>
            </tr>
            <tr>
              <td>
                <b>Title:</b>
              </td>
              <td>
                <asp:textbox id="TitleUpdateTextBox"
                  text='<%# Bind("Title") %>'
                  runat="server"/> 
              </td>
            </tr>
            <tr>
              <td>
                <b>Hire Date:</b>                 
              </td>
              <td>
                <asp:textbox id="HireDateUpdateTextBox"
                  text='<%# Bind("HireDate", "{0:d}") %>'
                  runat="server"/>
              </td>
            </tr>
            <tr style="height:150; vertical-align:top">
              <td>
                <b>Address:</b>
              </td>
              <td>
                <asp:textbox id="AddressUpdateTextBox"
                  text='<%# Bind("Address") %>'
                  runat="server"/>
                <br/>
                <asp:textbox id="CityUpdateTextBox"
                  text='<%# Bind("City") %>'
                  runat="server"/> 
                <asp:textbox id="RegionUpdateTextBox"
                  text='<%# Bind("Region") %>'
                  width="40"
                  runat="server"/>
                <asp:textbox id="PostalCodeUpdateTextBox"
                  text='<%# Bind("PostalCode") %>'
                  width="60"
                  runat="server"/>
                <br/>
                <asp:textbox id="CountryUpdateTextBox"
                  text='<%# Bind("Country") %>'
                  runat="server"/> 
              </td>
            </tr>
            <tr>
              <td colspan="2">
                <asp:linkbutton id="UpdateButton"
                  text="Update"
                  commandname="Update"
                  runat="server"/>
                <asp:linkbutton id="CancelButton"
                  text="Cancel"
                  commandname="Cancel"
                  runat="server"/> 
              </td>
            </tr>
          </table>       
        </edititemtemplate>
          
        <pagersettings position="Bottom"
          mode="Numeric"/> 
                  
      </asp:formview>
      
      <br/><br/>
      
      <asp:label id="MessageLabel"
          forecolor="Red"
          runat="server"/>
          
      <!-- This example uses Microsoft SQL Server and connects  -->
      <!-- to the Northwind sample database. Use an ASP.NET     -->
      <!-- expression to retrieve the connection string value   -->
      <!-- from the Web.config file.                            -->
      <asp:sqldatasource id="EmployeeSource"
        selectcommand="Select [EmployeeID], [LastName], [FirstName], [Title], [Address], [City], [Region], [PostalCode], [Country], [HireDate], [PhotoPath] From [Employees]"
        updatecommand="Update [Employees] Set [LastName]=@LastName, [FirstName]=@FirstName, [Title]=@Title, [Address]=@Address, [City]=@City, [Region]=@Region, [PostalCode]=@PostalCode, [Country]=@Country Where [EmployeeID]=@EmployeeID"
        connectionstring="<%$ ConnectionStrings:NorthWindConnectionString%>" 
        runat="server"/>
            
    </form>
  </body>
</html>

Hinweise

Die IBindableTemplate Schnittstelle bietet eine Möglichkeit für ASP.NET datengebundene Steuerelemente, wie z. B. , GridViewund FormView, an Daten zu binden, die von einem ASP.NET Datenquellensteuerelement bereitgestellt werden, ObjectDataSource zDetailsView. B. oder SqlDataSource, wenn das datengebundene Steuerelement Vorlageninhalte enthält.

Hinweis

Seitenentwickler implementieren die IBindableTemplate Schnittstelle nicht. Entwickler, die benutzerdefinierte datengebundene Steuerelemente erstellen, können Objekte in Implementierungen der PerformDataBinding Und Methoden bearbeitenIBindableTemplate, aber ihre eigenen IBindableTemplate ExtractRowValues Objekte nicht implementieren.

Datengebundene Steuerelemente wie z GridView . B. sind in der Regel auf ihre untergeordneten Steuerelementbäume aufmerksam und können daher Werte an sie binden, Werte aus ihnen extrahieren und diese Werte zwischen dem datengebundenen Steuerelement und einem Datenquellensteuerelement übergeben, wenn die Datenbindung auftritt. Wenn ein Seitenentwickler jedoch Vorlageninhalte für ein datengebundenes Steuerelement definiert, sind die untergeordneten Steuerelemente innerhalb der Vorlage nicht für das übergeordnete datengebundene Steuerelement sichtbar: Das übergeordnete Steuerelement kann den untergeordneten Inhalt rendern (da Steuerelemente effektiv gerendert werden), aber es kann die Werte dieser untergeordneten Steuerelemente nicht extrahieren, um an das Update eines zugeordneten Datenquellensteuerelements zu übergeben, Einfügen oder Löschen des Vorgangs. In Datenbindungsszenarien ist vorlagenbezogene Inhalte für ein übergeordnetes datengebundenes Steuerelement undurchsichtig. Die Bind Syntax ermöglicht es dem datengebundenen Steuerelement, die Werte aus einer Steuerelementdatenbindung in einer IBindableTemplate Instanz zu extrahieren.

Die Datenbindung kann eine Weg- oder Zwei-Weg-Methode sein. (Diese Bindungsanweisungen werden durch die BindingDirection Aufzählung definiert.) Die One-Way-Datenbindung ist jede Datenbindung, die in ausgehender Richtung ausgeführt wird, von der Datenquellensteuerung bis zum datengebundenen Steuerelement; Beispielsweise umfasst jedes Datenleseszenario eine einmalige Datenbindung. Bei einer einmaligen Datenbindung können Sie die Syntax der Datenbindung (<%# Eval("fieldname") %>) innerhalb von vorlagenbasierten Inhalten verwenden und nicht zwei wegeweise ASP.NET Datenbindungssyntax verwenden. Die Zwei-Wege-Datenbindung beschreibt die Datenbindung in der eingehenden Richtung, von dem datengebundenen Steuerelement an das Datenquellensteuerelement. Automatische Bearbeitung, Einfügen und Löschen von Szenarien mit ASP.NET datengebundenen und Datenquellensteuerelementen sind zwei wegeweise Datenbindungsszenarien. Diese Szenarien verwenden Zwei-Wege-Datenbindungsausdrücke (<%# Bind("fieldname") %>). Die IBindableTemplate Schnittstelle und die ASP.NET Infrastruktur unterstützen automatische, deklarative, zweistufige Datenbindung zwischen ASP.NET Datenquellensteuerelementen und vorlagenbasierten Inhalten. Weitere Informationen zu ASP.NET Datenbindungsausdrücke und -syntax finden Sie unter "Binding to Datenbanken and Data-Binding Expressions Overview".

Vorlageninhalte für datengebundene Steuerelemente werden am häufigsten deklarativ definiert. In der folgenden Tabelle werden die am häufigsten verwendeten Prozesse beschrieben, um vorlagengebundene Daten an datengebundene Steuerelemente zu binden.

Datengebundenes Steuerelement Prozess
DetailsView Das datengebundene Steuerelement ist an Daten gebunden, die die DataSourceID Eigenschaft des Datenquellensteuerelements verwenden, und der Vorlageninhalt wird in einer ItemTemplateoder EditItemTemplate InsertItemTemplate einer Eigenschaft definiert.
GridView Das datengebundene Steuerelement ist an Daten gebunden, indem die Eigenschaft des Datenquellensteuerelements verwendet DataSourceID wird, und der Vorlageninhalt wird in einer ItemTemplate oder EditItemTemplate einer Eigenschaft definiert. Das GridView Steuerelement unterstützt keinen Einfügevorgang.
FormView Das datengebundene Steuerelement ist an Daten gebunden, die die Eigenschaft verwenden DataSourceID , und der Vorlageninhalt wird in einem ItemTemplate, InsertItemTemplateoder einer Eigenschaft oder EditItemTemplate in einem TemplateField Objekt definiert.

Die DataList Steuerelemente Repeater unterstützen keine automatischen zweiseitigen Datenbindungsszenarien.

ASP.NET erstellt implizit ein IBindableTemplate Objekt, wenn Vorlageninhalte, die an ein ASP.NET Datenquellensteuerelement innerhalb der Vorlage gebunden sind, analysiert werden. Insbesondere erstellt der ASP.NET Parser eine Instanz der CompiledBindableTemplateBuilder Klasse, wenn er Vorlageninhalte analysiert, die ASP.NET Datenbindungssyntax verwendet und ASP.NET Webserversteuerelemente enthält, die die Datenbindung unterstützen. Diese ASP.NET Seversteuerelemente werden durch das BindableAttribute Attribut gekennzeichnet.

Die IBindableTemplate Schnittstelle definiert eine Methode, ExtractValues. Diese Methode wird für die Zwei-Wege-Datenbindung definiert, sodass ein datengebundenes Steuerelement die Namen-/Wertpaare automatisch aus Vorlageninhalten extrahieren und die Paare an ein Datenquellensteuerelement zur Laufzeit übergeben können. Für die automatische Datenbindung, die erfolgreich ausgeführt werden soll, müssen die Feldnamen, die aus dem vorlagenbezogenen Inhalt durch die ExtractValues Methode extrahiert werden, parameternamen in einem zugeordneten Datenquellensteuerelement übereinstimmen. Steuerelemententwickler rufen die ExtractValues Methode explizit nur innerhalb ihrer Implementierungen oder ExtractRowValues einer anderen ähnlichen Methode eines benutzerdefinierten datengebundenen Steuerelements auf.

Methoden

ExtractValues(Control)

Ruft beim Implementieren durch eine Klasse eine Gruppe von Name-Wert-Paaren für Werte ab, die im auf Vorlagen basierenden Inhalt mithilfe der Syntax für bidirektionale ASP.NET-Datenbindung gebunden wurden.

InstantiateIn(Control)

Definiert bei der Implementierung durch eine Klasse das Control-Objekt, zu dem untergeordnete Steuerelemente und Vorlagen gehören. Diese untergeordneten Steuerelemente wiederum werden innerhalb einer Inlinevorlage definiert.

(Geerbt von ITemplate)

Gilt für

Siehe auch