IBindableTemplate Arabirim

Tanım

ve FormViewgibi DetailsView ASP.NET veriye bağlı denetimlerin şablonlu içerik bölümlerindeki ASP.NET veri kaynağı denetimine otomatik olarak bağlanması için bir yol sağlar.

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
Türetilmiş
Uygulamalar

Örnekler

Aşağıdaki kod örneği, bir FormView denetimin şablonlu içeriği bildirimli olarak tanımlamasını, denetim SqlDataSource tarafından sağlanan verilere bağlanmasını ve mevcut kayıtları görüntüleyip düzenleyebildiğini gösterir. ASP.NET ayrıştırıcısı, şablonlu içeriği ayrıştırarak çalışma zamanında hem tek yönlü ASP.NET veri bağlama söz dizimi () hem de iki yönlü veri bağlama söz dizimi (<%# Eval("fieldname") %>``<%# Bind("fieldname") %>) ile denetimdeki SqlDataSource değerleri şablonda tanımlanan veri bağlama alanlarına bağlayabilen bir IBindableTemplate nesne oluşturur.

Önemli

Bu denetim, olası bir güvenlik tehdidi olan kullanıcı girişini kabul eden bir metin kutusuna sahiptir. Varsayılan olarak, ASP.NET Web sayfaları kullanıcı girişinin betik veya HTML öğeleri içermediğini doğrular. Daha fazla bilgi için bkz . Betik Açıklarına Genel Bakış.


<%@ 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>

Açıklamalar

ArabirimIBindableTemplate, DetailsViewveriye bağlı denetim şablonlu içerik içerdiğinde veya gibi bir ASP.NET veri kaynağı denetimi tarafından sağlanan verilere bağlanmak için , GridViewve FormViewgibi ObjectDataSource SqlDataSourceverilere bağlı denetimleri ASP.NET bir yol sağlar.

Not

Sayfa geliştiricileri arabirimi uygulamaz IBindableTemplate . Özel veriye bağlı denetimler oluşturan geliştiriciler ve ExtractRowValues yöntemlerinin PerformDataBinding uygulamalarında nesneleri işleyip IBindableTemplate kendi IBindableTemplate nesnelerini uygulamayabilir.

Gibi GridView veriye bağlı denetimler genellikle alt denetim ağaçlarının farkındadır ve bu nedenle bunlara değer bağlayabilir, bunlardan değerler ayıklayabilir ve bu değerleri veri bağlama her gerçekleştiğinde veriye bağlı denetim ile bir veri kaynağı denetimi arasında geçirebilir. Ancak, bir sayfa geliştiricisi veriye bağlı denetim için şablonlu içerik tanımladığında, şablondaki alt denetimler üst veriye bağlı denetime görünmez: üst öğe alt içeriği işleyebilir (denetimler kendilerini etkili bir şekilde işlediğinden), ancak ilişkili bir veri kaynağı denetiminin güncelleştirmesine geçirmek üzere bu alt denetimlerin değerlerini ayıklayamaz. ekleme veya silme işlemi. Veri bağlama senaryolarında, şablonlu içerik üst veriye bağlı denetime göre donuk olur. Söz Bind dizimi, veriye bağlı denetimin bir örneğin içindeki IBindableTemplate verilere bağlı bir denetimden değerleri ayıklamasını mümkün kılar.

Veri bağlama tek yönlü veya iki yönlü olabilir. (Bu bağlama yönergeleri sabit listesi tarafından BindingDirection tanımlanır.) Tek yönlü veri bağlama, veri kaynağı denetiminden veriye bağlı denetime giden yönde gerçekleştirilen tüm veri bağlamalarıdır; örneğin, herhangi bir veri okuma senaryosu tek yönlü veri bağlamayı içerir. Tek yönlü veri bağlama için, şablonlu içerik içinde tek yönlü veri bağlama söz dizimini (<%# Eval("fieldname") %>) kullanabilirsiniz ve iki yönlü ASP.NET veri bağlama söz dizimini kullanmanız gerekmez. İki yönlü veri bağlama, veri bağlamayı veriye bağlı denetimden veri kaynağı denetimine giden yönde açıklar. Veriye bağlı ASP.NET ve veri kaynağı denetimlerini kullanan otomatik düzenleme, ekleme ve silme senaryoları iki yönlü veri bağlama senaryolarıdır. Bu senaryolarda iki yönlü veri bağlama ifadeleri (<%# Bind("fieldname") %> kullanılır. IBindableTemplate Arabirim ve ASP.NET altyapısı, ASP.NET veri kaynağı denetimleri ile şablonlu içerik arasında otomatik, bildirim temelli, iki yönlü veri bağlamayı destekler. ASP.NET veri bağlama ifadeleri ve söz dizimi hakkında daha fazla bilgi için bkz. Veritabanlarına Bağlama ve Veri Bağlama İfadelerine Genel Bakış.

Veriye bağlı denetimler için şablonlu içerik çoğunlukla bildirim temelli olarak tanımlanır. Aşağıdaki tabloda, şablonlu verileri veriye bağlı denetimlere bağlamak için en yaygın olarak kullanılan işlemler açıklanmaktadır.

Veriye bağlı denetim İşleme
DetailsView Veriye bağlı denetim, veri kaynağı denetiminin DataSourceID özelliği kullanılarak verilere bağlıdır ve şablonlu içerik bir ItemTemplateveya EditItemTemplate InsertItemTemplate özelliğinde tanımlanır.
GridView Veriye bağlı denetim, veri kaynağı denetiminin DataSourceID özelliği kullanılarak verilere bağlıdır ve şablonlu içerik bir ItemTemplate veya EditItemTemplate özelliğinde tanımlanır. Denetim GridView ekleme işlemini desteklemez.
FormView Veriye bağlı denetim özelliği kullanılarak DataSourceID verilere bağlıdır ve şablonlu içerik bir ItemTemplate, InsertItemTemplateveya özelliğinde ya EditItemTemplate da nesnesinde TemplateField tanımlanır.

DataList ve Repeater denetimleri otomatik iki yönlü veri bağlama senaryolarını desteklemez.

ASP.NET, şablon içindeki bir IBindableTemplate ASP.NET veri kaynağı denetimine bağlanan şablonlu içerik ayrıştırıldığında örtük olarak bir nesne oluşturur. Özellikle, ASP.NET ayrıştırıcısı, ASP.NET veri bağlama söz dizimini CompiledBindableTemplateBuilder kullanan ve veri bağlamayı destekleyen ASP.NET Web sunucusu denetimleri içeren şablonlu içeriği ayrıştırdığında sınıfının bir örneğini oluşturur. Bu ASP.NET sunucu denetimleri özniteliği tarafından BindableAttribute işaretlenir.

IBindableTemplate arabirimi tek bir yöntem tanımlar: ExtractValues. Bu yöntem, iki yönlü veri bağlama için tanımlanır, böylece veriye bağlı denetim şablonlu içerikten ad/değer çiftlerini otomatik olarak ayıklayabilir ve çiftleri çalışma zamanında bir veri kaynağı denetimine geçirebilir. Otomatik veri bağlamanın başarılı olması için, yöntemi tarafından şablonlu içerikten ayıklanan alan adlarının ExtractValues ilişkili bir veri kaynağı denetimindeki parametre adları ile eşleşmesi gerekir. Denetim geliştiricileri yöntemini açıkça yalnızca kendi uygulamaları ExtractRowValues içinde veya özel veriye bağlı denetimin başka bir benzer yöntemi içinde çağırırExtractValues.

Yöntemler

ExtractValues(Control)

Bir sınıf tarafından uygulandığında, şablonlu içerik içinde iki yönlü ASP.NET veri bağlama söz dizimi kullanılarak bağlanan değerler için bir dizi ad/değer çifti alır.

InstantiateIn(Control)

Bir sınıf tarafından uygulandığında, alt denetimlerin ve şablonların Control ait olduğu nesneyi tanımlar. Bu alt denetimler sıralı bir şablon içinde tanımlanır.

(Devralındığı yer: ITemplate)

Şunlara uygulanır

Ayrıca bkz.