Aracılığıyla paylaş


IBindableTemplate Arabirim

Tanım

ve FormViewgibi veriye bağlı denetimlerin şablonlu içerik bölümlerindeki ASP.NET veri kaynağı denetimine otomatik olarak DetailsView bağlanması için ASP.NET 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 nasıl tanımlayabileceğinizi, bir SqlDataSource denetim tarafından sağlanan verilere nasıl bağlanabileceğini ve var olan kayıtları nasıl görüntüleyip düzenleyebileceğini gösterir. ASP.NET ayrıştırıcısı, 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 çalışma zamanında 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

IBindableTemplate Arabirim, veriye bağlı denetim şablonlu içerik içerdiğinde veya gibi DetailsViewbir ASP.NET veri kaynağı denetimi tarafından sağlanan verilere bağlanmak için , GridViewve FormViewgibi ObjectDataSourceSqlDataSourceveriye bağlı denetimleri ASP.NET için 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.

Veri bağlama 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ğerleri ayıklayabilir ve veri bağlama gerçekleştiğinde bu değerleri veriye bağlı denetimle 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 bir üst veriye bağlı denetim için opaktır. Söz Bind dizimi, veriye bağlı denetimin bir örneğin içindeki IBindableTemplate denetim verilerinden 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 veri bağlama söz dizimini iki yönlü ASP.NET kullanmanız gerekmez. İki yönlü veri bağlama, veri bağlama denetiminden veri kaynağı denetimine giden yönde veri bağlamayı açıklar. Veriye bağlı ve veri kaynağı denetimlerini kullanan ASP.NET 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ğini kullanan verilere bağlıdır ve şablonlu içerik bir ItemTemplateveya EditItemTemplateInsertItemTemplate ö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 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 bir örneğini CompiledBindableTemplateBuilder 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 çalışma zamanında çiftleri bir veri kaynağı denetimine geçirebilir. Otomatik veri bağlamanın başarılı olması için, yöntemi tarafından şablon içeriğinden 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 yalnızca özel bir veriye bağlı denetimin ExtractRowValues veya başka bir benzer yönteminin uygulamaları içinde açıkça ç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.