DataList'in Düzenleme Arabirimini Özelleştirme (C#)
tarafından Scott Mitchell
Bu öğreticide, DataList için DropDownLists ve CheckBox içeren daha zengin bir düzenleme arabirimi oluşturacağız.
Giriş
DataList EditItemTemplate
içindeki işaretleme ve Web denetimleri düzenlenebilir arabirimini tanımlar. Şimdiye kadar incelediğimiz tüm düzenlenebilir DataList örneklerinde, düzenlenebilir arabirim TextBox Web denetimlerinden oluşturulmuş. Önceki öğreticide doğrulama denetimleri ekleyerek düzenleme zamanı kullanıcı deneyimini iyileştirdik.
EditItemTemplate
, DropDownLists, RadioButtonLists, Calendars gibi TextBox dışındaki Web denetimlerini içerecek şekilde genişletilebilir. TextBoxes'da olduğu gibi, düzenleme arabirimini diğer Web denetimlerini içerecek şekilde özelleştirirken aşağıdaki adımları uygulayın:
- Web denetimini öğesine
EditItemTemplate
ekleyin. - İlgili veri alanı değerini uygun özelliğe atamak için veri bağlama söz dizimini kullanın.
- Olay işleyicisinde
UpdateCommand
, Program aracılığıyla Web denetim değerine erişin ve uygun BLL yöntemine geçirin.
Bu öğreticide, DataList için DropDownLists ve CheckBox içeren daha zengin bir düzenleme arabirimi oluşturacağız. Özellikle, ürün bilgilerini listeleyen ve ürünün adının, sağlayıcısının, kategorisinin ve sonlandırılan durumunun güncelleştirilmeye izin veren bir DataList oluşturacağız (bkz. Şekil 1).
Şekil 1: Düzenleme Arabirimi bir TextBox, İki DropDownLists ve bir CheckBox içerir (tam boyutlu görüntüyü görüntülemek için tıklayın)
1. Adım: Ürün Bilgilerini Görüntüleme
DataList'in düzenlenebilir arabirimini oluşturabilmek için önce salt okunur arabirimi oluşturmamız gerekir. İlk olarak CustomizedUI.aspx
klasörü EditDeleteDataList
açın ve Tasarım Aracı sayfasından bir DataList ekleyin ve özelliğini olarak Products
ayarlayınID
. DataList'in akıllı etiketinden yeni bir ObjectDataSource oluşturun. Bu yeni ObjectDataSource ProductsDataSource
adını verin ve sınıfın ProductsBLL
GetProducts
yönteminden veri alacak şekilde yapılandırın. Önceki düzenlenebilir DataList öğreticilerinde olduğu gibi, düzenlenen ürün bilgilerini doğrudan İş Mantığı Katmanı'na giderek güncelleştireceğiz. Buna göre, UPDATE, INSERT ve DELETE sekmelerindeki açılan listeleri (Yok) olarak ayarlayın.
Şekil 2: UPDATE, INSERT ve DELETE Sekmelerini Drop-Down Listeler (Yok) olarak ayarlayın (Tam boyutlu görüntüyü görüntülemek için tıklayın)
ObjectDataSource'u yapılandırdıktan sonra Visual Studio, döndürülen her veri alanının adını ve değerini listeleyen DataList için bir varsayılan ItemTemplate
değer oluşturur. ItemTemplate
öğesini, şablonun bir <h4>
öğedeki ürün adını, kategori adı, sağlayıcı adı, fiyat ve kullanımdan kaldırılan durumla birlikte listelemesi için öğesini değiştirin. Ayrıca, bir Düzenle düğmesi ekleyerek özelliğinin Düzenle olarak ayarlandığından CommandName
emin olun. Aşağıdakiler ItemTemplate
için bildirim temelli işaretleme:
<ItemTemplate>
<h4>
<asp:Label ID="ProductNameLabel" runat="server"
Text='<%# Eval("ProductName") %>' />
</h4>
<table border="0">
<tr>
<td class="ProductPropertyLabel">Category:</td>
<td class="ProductPropertyValue">
<asp:Label ID="CategoryNameLabel" runat="server"
Text='<%# Eval("CategoryName") %>' />
</td>
<td class="ProductPropertyLabel">Supplier:</td>
<td class="ProductPropertyValue">
<asp:Label ID="SupplierNameLabel" runat="server"
Text='<%# Eval("SupplierName") %>' />
</td>
</tr>
<tr>
<td class="ProductPropertyLabel">Discontinued:</td>
<td class="ProductPropertyValue">
<asp:Label ID="DiscontinuedLabel" runat="server"
Text='<%# Eval("Discontinued") %>' />
</td>
<td class="ProductPropertyLabel">Price:</td>
<td class="ProductPropertyValue">
<asp:Label ID="UnitPriceLabel" runat="server"
Text='<%# Eval("UnitPrice", "{0:C}") %>' />
</td>
</tr>
<tr>
<td colspan="4">
<asp:Button runat="Server" ID="EditButton"
Text="Edit" CommandName="Edit" />
</td>
</tr>
</table>
<br />
</ItemTemplate>
Yukarıdaki işaretleme, ürün adı için bir <h4> başlığı ve kalan alanlar için dört sütunlu <table>
bir başlık kullanarak ürün bilgilerini belirler. ProductPropertyLabel
içinde Styles.css
tanımlanan ve ProductPropertyValue
CSS sınıfları önceki öğreticilerde ele alınmıştır. Şekil 3'de tarayıcı üzerinden görüntülendiğinde ilerleme durumumuz gösterilmektedir.
Şekil 3: Her Ürünün Adı, Sağlayıcı, Kategori, Sonlandırılan Durumu ve Fiyatı Görüntülenir (Tam boyutlu görüntüyü görüntülemek için tıklayın)
2. Adım: Web Denetimlerini Düzenleme Arabirimine Ekleme
Özelleştirilmiş DataList düzenleme arabirimini oluşturmanın ilk adımı, gerekli Web denetimlerini öğesine EditItemTemplate
eklemektir. Özellikle, kategori için bir DropDownList, sağlayıcı için başka bir liste ve durdurulan durum için bir CheckBox gerekir. Bu örnekte ürünün fiyatı düzenlenemez olduğundan, Etiket Web denetimi kullanarak görüntülemeye devam edebiliriz.
Düzenleme arabirimini özelleştirmek için DataList'in akıllı etiketinden Şablonları Düzenle bağlantısına tıklayın ve açılan listeden seçeneği belirleyin EditItemTemplate
. öğesine EditItemTemplate
bir DropDownList ekleyin ve öğesini ID
olarak Categories
ayarlayın.
Şekil 4: Kategoriler için DropDownList ekleme (Tam boyutlu görüntüyü görüntülemek için tıklayın)
Ardından DropDownList'in akıllı etiketinden Veri Kaynağı Seç seçeneğini belirleyin ve adlı CategoriesDataSource
yeni bir ObjectDataSource oluşturun. Sınıfın yöntemini kullanmak için bu ObjectDataSource'ı CategoriesBLL
GetCategories()
yapılandırın (bkz. Şekil 5). Ardından DropDownList Veri Kaynağı Yapılandırma Sihirbazı, her ListItem
s Text
ve Value
özellik için kullanılacak veri alanlarını ister. DropDownList öğesinin veri alanını görüntülemesini CategoryName
ve Şekil 6'da gösterildiği gibi değerini kullanmasını CategoryID
sağlayın.
Şekil 5: Adlı CategoriesDataSource
Yeni Bir ObjectDataSource Oluşturma (Tam boyutlu görüntüyü görüntülemek için tıklayın)
Şekil 6: DropDownList Görüntü ve Değer Alanlarını Yapılandırma (Tam boyutlu görüntüyü görüntülemek için tıklayın)
Tedarikçiler için dropdownlist oluşturmak için bu adım serisini yineleyin. ID
Bu DropDownList için öğesini olarak Suppliers
ayarlayın ve ObjectDataSource olarak adlandırınSuppliersDataSource
.
İki DropDownLists ekledikten sonra, sonlandırılan durum için bir CheckBox ve ürün adı için bir TextBox ekleyin. ID
CheckBox ve TextBox Discontinued
için s'yi sırasıyla ve ProductName
olarak ayarlayın. Kullanıcının ürün adı için bir değer sağladığından emin olmak için bir RequiredFieldValidator ekleyin.
Son olarak Güncelleştir ve İptal düğmelerini ekleyin. Bu iki düğme için özelliklerinin sırasıyla Güncelleştir ve İptal olarak ayarlanmasının zorunlu CommandName
olduğunu unutmayın.
Düzenleme arabirimini istediğiniz gibi düzenlemekten çekinmeyin. Aşağıdaki bildirim temelli söz diziminde ve ekran görüntüsünde gösterildiği gibi salt okunur arabirimden aynı dört sütunlu <table>
düzeni kullanmayı tercih ettim:
<EditItemTemplate>
<h4>
<asp:Label ID="ProductNameLabel" runat="server"
Text='<%# Eval("ProductName") %>' />
</h4>
<table border="0">
<tr>
<td class="ProductPropertyLabel">Name:</td>
<td colspan="3" class="ProductPropertyValue">
<asp:TextBox runat="server" ID="ProductName" Width="90%" />
<asp:RequiredFieldValidator ID="RequiredFieldValidator1"
ControlToValidate="ProductName"
ErrorMessage="You must enter a name for the product."
runat="server">*</asp:RequiredFieldValidator>
</td>
</tr>
<tr>
<td class="ProductPropertyLabel">Category:</td>
<td class="ProductPropertyValue">
<asp:DropDownList ID="Categories" runat="server"
DataSourceID="CategoriesDataSource"
DataTextField="CategoryName" DataValueField="CategoryID" />
</td>
<td class="ProductPropertyLabel">Supplier:</td>
<td class="ProductPropertyValue">
<asp:DropDownList ID="Suppliers" DataTextField="CompanyName"
DataSourceID="SuppliersDataSource"
DataValueField="SupplierID" runat="server" />
</td>
</tr>
<tr>
<td class="ProductPropertyLabel">Discontinued:</td>
<td class="ProductPropertyValue">
<asp:CheckBox runat="server" id="Discontinued" />
</td>
<td class="ProductPropertyLabel">Price:</td>
<td class="ProductPropertyValue">
<asp:Label ID="UnitPriceLabel" runat="server"
Text='<%# Eval("UnitPrice", "{0:C}") %>' />
</td>
</tr>
<tr>
<td colspan="4">
<asp:Button runat="Server" ID="UpdateButton" CommandName="Update"
Text="Update" />
<asp:Button runat="Server" ID="CancelButton" CommandName="Cancel"
Text="Cancel" CausesValidation="False" />
</td>
</tr>
</table>
<br />
<asp:ObjectDataSource ID="CategoriesDataSource" runat="server"
OldValuesParameterFormatString="original_{0}" SelectMethod="GetCategories"
TypeName="CategoriesBLL">
</asp:ObjectDataSource>
<asp:ObjectDataSource ID="SuppliersDataSource" runat="server"
OldValuesParameterFormatString="original_{0}" SelectMethod="GetSuppliers"
TypeName="SuppliersBLL">
</asp:ObjectDataSource>
</EditItemTemplate>
Şekil 7: Düzenleme Arabirimi, Read-Only Arabirimi gibi düzenlenmiştir (Tam boyutlu görüntüyü görüntülemek için tıklayın)
3. Adım: EditCommand ve CancelCommand Olay İşleyicilerini Oluşturma
Şu anda içinde veri bağlama söz dizimi EditItemTemplate
yoktur (dosyasından UnitPriceLabel
ayrıntılı olarak kopyalanan ItemTemplate
dışında). Kısa bir süre için veri bağlama söz dizimini ekleyeceğiz, ancak önce DataList ve EditCommand
CancelCommand
olayları için olay işleyicileri oluşturalım. Olay işleyicisinin EditCommand
sorumluluğunun, Düzenle düğmesine tıklanan DataList öğesinin düzenleme arabirimini işlemek olduğunu, CancelCommand
ancak işin DataList'i düzenleme öncesi durumuna döndürmek olduğunu hatırlayın.
Bu iki olay işleyicisini oluşturun ve aşağıdaki kodu kullanmalarını sağlayın:
protected void Products_EditCommand(object source, DataListCommandEventArgs e)
{
// Set the DataList's EditItemIndex property and rebind the data
Products.EditItemIndex = e.Item.ItemIndex;
Products.DataBind();
}
protected void Products_CancelCommand(object source, DataListCommandEventArgs e)
{
// Return to DataList to its pre-editing state
Products.EditItemIndex = -1;
Products.DataBind();
}
Bu iki olay işleyicisi mevcutken, Düzenle düğmesine tıklanması düzenleme arabirimini görüntüler ve İptal düğmesine tıklanması, düzenlenen öğeyi salt okunur moduna döndürür. Şekil 8'de, Chef Anton'un Gumbo Mix'i için Düzenle düğmesine tıkladıktan sonra DataList gösterilmektedir. Düzenleme arabirimine henüz veri bağlama söz dizimi eklemediğimiz için TextBox boş, ProductName
Discontinued
CheckBox işareti kaldırılmış ve ve Suppliers
DropDownLists'ten Categories
seçilen ilk öğeler.
Şekil 8: Düzenle Düğmesine Tıklanması Düzenleme Arabirimini Görüntüler (Tam boyutlu görüntüyü görüntülemek için tıklayın)
4. Adım: DataBinding Söz Dizimini Düzenleme Arabirimine Ekleme
Düzenleme arabiriminin geçerli ürünün değerlerini görüntülemesini sağlamak için, veri alanı değerlerini uygun Web denetimi değerlerine atamak için veri bağlama söz dizimini kullanmamız gerekir. Veri bağlama söz dizimi, Şablonları Düzenle ekranına gidip Web denetimleri akıllı etiketlerinden Veri Bağlamalarını Düzenle bağlantısı seçilerek Tasarım Aracı aracılığıyla uygulanabilir. Alternatif olarak, veri bağlama söz dizimi doğrudan bildirim temelli işaretlemeye eklenebilir.
ProductName
Veri alanı değerini TextBox s Text
özelliğineProductName
, CategoryID
ve veri alanı değerlerini ve SupplierID
Suppliers
DropDownLists SelectedValue
özelliklerineCategories
, veri alanı değerini de Discontinued
CheckBox s Checked
özelliğine atayınDiscontinued
. Bu değişiklikleri Tasarım Aracı veya doğrudan bildirim temelli işaretleme aracılığıyla yaptıktan sonra, sayfayı bir tarayıcı üzerinden yeniden ziyaret edin ve Chef Anton'un Gumbo Mix'i için Düzenle düğmesine tıklayın. Şekil 9'da gösterildiği gibi, veri bağlama söz dizimi geçerli değerleri TextBox, DropDownLists ve CheckBox'a eklemiştir.
Şekil 9: Düzenle Düğmesine Tıklanması Düzenleme Arabirimini Görüntüler (Tam boyutlu görüntüyü görüntülemek için tıklayın)
5. Adım: Kullanıcının Değişikliklerini UpdateCommand Olay İşleyicisine Kaydetme
Kullanıcı bir ürünü düzenlediğinde ve Güncelleştir düğmesine tıkladığında bir geri gönderme gerçekleşir ve DataList'in UpdateCommand
olayı tetikler. Olay işleyicisinde, veritabanındaki ürünü güncelleştirmek için BLL ile ve arabirimindeki EditItemTemplate
Web denetimlerinden değerleri okumamız gerekir. Önceki öğreticilerde gördüğümüz gibi, ProductID
güncelleştirilmiş ürünün koleksiyonundan DataKeys
erişilebilir. Kullanıcı tarafından girilen alanlara, aşağıdaki kodda gösterildiği gibi kullanarak FindControl("controlID")
Web denetimlerine program aracılığıyla başvurarak erişilir:
protected void Products_UpdateCommand(object source, DataListCommandEventArgs e)
{
// Make sure the page is valid...
if (!Page.IsValid)
return;
// Read in the ProductID from the DataKeys collection
int productID = Convert.ToInt32(Products.DataKeys[e.Item.ItemIndex]);
// Read in the product name and price values
TextBox productName = (TextBox)e.Item.FindControl("ProductName");
DropDownList categories = (DropDownList)e.Item.FindControl("Categories");
DropDownList suppliers = (DropDownList)e.Item.FindControl("Suppliers");
CheckBox discontinued = (CheckBox)e.Item.FindControl("Discontinued");
string productNameValue = null;
if (productName.Text.Trim().Length > 0)
productNameValue = productName.Text.Trim();
int categoryIDValue = Convert.ToInt32(categories.SelectedValue);
int supplierIDValue = Convert.ToInt32(suppliers.SelectedValue);
bool discontinuedValue = discontinued.Checked;
// Call the ProductsBLL's UpdateProduct method...
ProductsBLL productsAPI = new ProductsBLL();
productsAPI.UpdateProduct(productNameValue, categoryIDValue, supplierIDValue,
discontinuedValue, productID);
// Revert the DataList back to its pre-editing state
Products.EditItemIndex = -1;
Products.DataBind();
}
Kod, sayfadaki tüm doğrulama denetimlerinin Page.IsValid
geçerli olduğundan emin olmak için özelliğine başvurarak başlar. ise Page.IsValid
True
, düzenlenen ürünün ProductID
değeri koleksiyondan DataKeys
okunur ve içindeki EditItemTemplate
veri girişi Web denetimleri program aracılığıyla başvurulur. Ardından, bu Web denetimlerindeki değerler daha sonra uygun UpdateProduct
aşırı yüklemeye geçirilen değişkenlere okunur. Veriler güncelleştirildikten sonra DataList, düzenleme öncesi durumuna döndürülür.
Not
Kodu ve bu örneği odaklanmış tutmak için BLL ve DAL-Level Özel Durumları İşleme öğreticisine eklenen özel durum işleme mantığını atladım. Alıştırma olarak, bu öğreticiyi tamamladıktan sonra bu işlevi ekleyin.
6. Adım: NULL CategoryID ve SupplierID Değerlerini İşleme
Northwind veritabanı, tablo CategoryID
ve SupplierID
sütunlar için NULL
Products
değerlere izin verir. Ancak, düzenleme arabirimimiz şu anda değerleri karşılamaz NULL
. Veya sütunları için değeri olan bir NULL
ürünü düzenlemeye çalışırsak şuna benzer bir hata iletisiyle karşılaşırızArgumentOutOfRangeException
: 'Categories' öğesinde SelectedValue değeri geçersizdir çünkü öğe listesinde yoktur.CategoryID
SupplierID
Ayrıca, şu anda bir ürünün kategorisini veya tedarikçi değerini olmayan birNULL
değerden bir değere değiştirmenin hiçbir NULL
yolu yoktur.
Kategori ve tedarikçi DropDownLists değerlerini desteklemek NULL
için ek ListItem
bir eklememiz gerekir. Bunun ListItem
değeri olarak Text
(Hiçbiri) kullanmayı seçtim, ancak isterseniz bunu başka bir değerle (boş dize gibi) değiştirebilirsiniz. Son olarak DropDownLists'i AppendDataBoundItems
olarak True
ayarlamayı unutmayın; bunu unutursanız DropDownList'e bağlı kategoriler ve sağlayıcılar statik olarak eklenen ListItem
öğesinin üzerine yazar.
Bu değişiklikleri yaptıktan sonra, DataList'lerdeki DropDownLists EditItemTemplate
işaretlemesi aşağıdakine benzer görünmelidir:
<asp:DropDownList ID="Categories" DataSourceID="CategoriesDataSource"
DataTextField="CategoryName" DataValueField="CategoryID" runat="server"
SelectedValue='<%# Eval("CategoryID") %>' AppendDataBoundItems="True">
<asp:ListItem Value=" Selected="True">(None)</asp:ListItem>
</asp:DropDownList>
...
<asp:DropDownList ID="Suppliers" DataSourceID="SuppliersDataSource"
DataTextField="CompanyName" DataValueField="SupplierID" runat="server"
SelectedValue='<%# Eval("SupplierID") %>' AppendDataBoundItems="True">
<asp:ListItem Value=" Selected="True">(None)</asp:ListItem>
</asp:DropDownList>
Not
Static ListItem
s, Tasarım Aracı aracılığıyla veya doğrudan bildirim temelli söz dizimi aracılığıyla DropDownList'e eklenebilir. Veritabanı NULL
değerini temsil eden bir DropDownList öğesi eklerken, bildirim temelli söz dizimi aracılığıyla öğesini ListItem
eklediğinizden emin olun. Tasarım Aracı Collection Düzenleyici kullanırsanızListItem
, oluşturulan bildirim temelli söz dizimi boş bir dize atandığında ayarı tamamen atlar Value
ve şöyle bildirim temelli işaretleme oluşturur: <asp:ListItem>(None)</asp:ListItem>
. Bu zararsız görünse de, eksik Value
olan DropDownList özelliğinin Text
yerinde özellik değerini kullanmasına neden olur. Bu, bu seçilirse NULL
ListItem
(Hiçbiri) değerinin ürün veri alanına (CategoryID
veya SupplierID
bu öğreticide ) atanmaya çalışılacağı ve bunun özel durumla sonuçlandığı anlamına gelir. açıkça ayarlandığındaValue=""
, seçildiğinde ürün veri alanına NULL
ListItem
bir NULL
değer atanır.
İlerleme durumumuzu bir tarayıcı üzerinden görüntülemek için biraz zaman ayırın. Bir ürünü düzenlerken, ve Suppliers
DropDownList'lerin her ikisinin de DropDownList'in başında bir (Yok) seçeneği olduğunu unutmayınCategories
.
Şekil 10: Categories
ve Suppliers
DropDownLists bir (Yok) Seçeneği içerir (Tam boyutlu görüntüyü görüntülemek için tıklayın)
(Hiçbiri) seçeneğini veritabanı NULL
değeri olarak kaydetmek için olay işleyicisine UpdateCommand
geri dönmemiz gerekir. categoryIDValue
ve supplierIDValue
değişkenlerini null atanabilir tamsayılar olarak değiştirin ve yalnızca DropDownList'in SelectedValue
boş bir dize olmaması dışında Nothing
bir değer atayın:
int? categoryIDValue = null;
if (!string.IsNullOrEmpty(categories.SelectedValue))
categoryIDValue = Convert.ToInt32(categories.SelectedValue);
int? supplierIDValue = null;
if (!string.IsNullOrEmpty(suppliers.SelectedValue))
supplierIDValue = Convert.ToInt32(suppliers.SelectedValue);
Bu değişiklikle, kullanıcı bir veritabanı değerine Nothing
karşılık gelen açılan listelerden herhangi birinden (Yok) seçeneğini belirlediyse değeri BLL yöntemine NULL
geçirilirUpdateProduct
.
Özet
Bu öğreticide, bir TextBox, iki DropDownList ve bir CheckBox ile doğrulama denetimleri içeren üç farklı giriş Web denetimi içeren daha karmaşık bir DataList düzenleme arabiriminin nasıl oluşturulacağını gördük. Düzenleme arabirimini oluştururken, kullanılan Web denetimlerinden bağımsız olarak adımlar aynıdır: DataList'lere EditItemTemplate
Web denetimleri ekleyerek başlayın; ilgili veri alanı değerlerini uygun Web denetimi özellikleriyle atamak için veri bağlama söz dizimini kullanın ve olay işleyicisinde UpdateCommand
Web denetimlerine ve uygun özelliklerine program aracılığıyla erişin. değerlerini BLL'ye geçirme.
Yalnızca TextBoxes veya farklı Web denetimlerinden oluşan bir koleksiyondan oluşan bir düzenleme arabirimi oluştururken, veritabanı NULL
değerlerini doğru işlediğinden emin olun. s değerini dikkate NULL
alırken, var olan NULL
bir değeri düzenleme arabiriminde doğru bir şekilde görüntülemekle kalmaz, aynı zamanda bir değeri olarak NULL
işaretlemek için bir araç sunmanız da zorunludur. DataLists'teki DropDownList'ler için bu genellikle özelliği açıkça boş bir dizeye ()Value=""
ayarlanmış bir statik ListItem
Value
ekleme ve öğesinin seçili olup olmadığını NULL``ListItem
belirlemek için olay işleyicisine biraz kod UpdateCommand
eklemek anlamına gelir.
Mutlu Programlama!
Yazar hakkında
Yedi ASP/ASP.NET kitabının yazarı ve 4GuysFromRolla.com kurucusu Scott Mitchell, 1998'den beri Microsoft Web teknolojileriyle çalışmaktadır. Scott bağımsız bir danışman, eğitmen ve yazar olarak çalışmaktadır. Son kitabı Sams Teach Yourself ASP.NET 24 Hours 2.0'dır. Adresine adresinden veya adresinden ulaşabileceğiniz http://ScottOnWriting.NETblogu aracılığıyla ulaşabilirsinizmitchell@4GuysFromRolla.com.
Özel Teşekkürler
Bu öğretici serisi birçok yararlı gözden geçiren tarafından gözden geçirildi. Bu öğreticinin baş gözden geçirenleri Dennis Patterson, David Suru ve Randy Schmidt'tir. Yaklaşan MSDN makalelerimi gözden geçirmek istiyor musunuz? Öyleyse, bana adresinden bir satır mitchell@4GuysFromRolla.combırakın.
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin