Sayfanın CacheÖnBellek lenmesini engellemek için Head içine;
<meta http-equiv="Pragma" content="no-cache" /> <meta http-equiv="Expires" content="-1" />
Geçenlerde herhangi bir uygulama geliştiriyordum ki aniden bir kontrol ihtiyacım oldu. Söyle ki;
Bir Classnesne oluşturdum.
public class Employee { public int ID { get; set; } public string FirstName { get; set; } public string LastName { get; set; } public decimal Salary { get; set; } public DateTime HireDate { get; set; } }
Daha sonra kopyasınıinstance çıkarıp özelliklerine değer atadım. Buraya kadar herşey normal. Peki dedim şunu birde WebForm'unda zahmetsiz bir şekilde gösterebilsem ne süper olur. Böyle durumda akla en yatkın DetailsView veri kontrolü kullanmaktır. Lakin kontrolün DataSource özelliğine herhangi bir nesneyi zart diye atayamazsınız. Eğer atarsanız şöyle bir hata alırsınız
Hoş değil :(
Bu gibi durumlarda olmasa ne zaman kontrol geliştireceğiz ki :) Peki ne yapmak lazım; Mantık basit. Reflection ile nesne özelliklerini okumak, kontrolün ihtiyaç duyabileceği ekstra bilgileri Attributenitelik yardımı ile iletmek.
[Serializable] public class Employee { [FieldAttributes(IsVisible = false)] public int ID { get; set; } [FieldAttributes(FieldHead = "Ad")] public string FirstName { get; set; } [FieldAttributes(FieldHead = "Soyad")] public string LastName { get; set; } [FieldAttributes(FieldHead = "Maaş", Format = "N2")] public decimal Salary { get; set; } [FieldAttributes(FieldHead = "İşe Başlama Tarihi", Format = "dd.MM.yyyy")] public DateTime HireDate { get; set; } }
Kullanımın kolay olması için SmartTag ve DesignTimeSupport gibi atraksiyonlar.
Sonuç;
Proje dosyası.
Asp.Net sunucuserver kontrollerinden TextBox kontrolünü TextMode="Multiline" ayarlanarak kullanıldığında MaxLength özelliğiproperty çalışmamaktadır. Buraya çözüm için alternatif yöntemler yazacağım zaman zaman.
İlk çözüm yine sunucu kontrollerinden CustomValidator ile olacak.
<asp:TextBox ID="mesaj" runat="server" TextMode="MultiLine" Rows="6" Columns="40" /> <asp:CustomValidator ID="cvM" runat="server" ErrorMessage="En fazla 400 karakter." ForeColor="Maroon" ClientValidationFunction="Max400" ControlToValidate="mesaj" ValidationGroup="g1" /> <script type="text/javascript"> function Max400(source, arguments) { if (arguments.Value.length <= 40) arguments.IsValid = true; else arguments.IsValid = false; } </script>
devam edecek...
Asp.net sunucu kontrollerinden Panel'in GroupingText özelliğini kullanarak html çıktısı olarak Fieldset etiketi (etkisi) elde edilebilir.
<asp:Panel ID="pnlLogin" runat="server" BorderStyle="None" GroupingText="Login" Height="123px" Width="280px"> <asp:Label ID="lblUsername" runat="server" Text="Username" /> <asp:TextBox ID="txtUsername" runat="server" /> <br /> <asp:Button ID="btnSubmit" runat="server" Text="Enter" />
Html' e aşina iseniz ki ben çok aşinayımdır :) Help Workshop uygulaması ile kendi dokümantasyonunuzu oluşturmanız çok kolay olacaktır. Mantık olarak yapılan iş; Html uzantılı (bir birine bağlanmış) dosyaları (js,css ve resim de kullanabilirsiniz) derleyip .chm uzantılı yardım & bilgi dokumanları haline dönüştürmek. Basit bir web uygulaması yapmak gibi de düşünebilirsiniz. Şu ana kadar çok faydasını gördüm. Bilmeyenler de öğrensin diye basit bir görsel hazırladım. Umarım işinizi görür.
Çok yakın ve kadim bir dostum için araştırırken farkettim ve paylaşmak istedim. ListView kontrolü içinde ki verileri gruplayarak göstermek. DataList kontrolündeki RepeatColums özelliğini kullanmak gibi fakat birazcık farklı :)
Div etiketleriyle Listview'e şablon hazırlamak yeterli.
<asp:ListView ID="Listview1" runat="server" GroupltemCount="S" EnableViewState="false"> <ItemTemplate> <div style="width: 200px; float: left; font-family: Verdana; font-size: l0px; margin-bottom: l0px;"> <asp:Image ID="Imagel" runat="server" ImageUrl='<%# "image.aspx?path=" + Eval("FullName") %>' /> <br /> <strong>Dosya Adi:</strong> <%# Eval("Name")%> <br /> <strong>Uzunluk: </strong> <%# Eval("Length")%> <br /> <strong>Özellikler : </strong> <%# Eval("Attributes")%> </div> </ItemTemplate> <LayoutTemplate> <div id="groupPlaceholderContainer" runat="server"> <div id="groupPlaceholder" runat="server"> </div> </div> </LayoutTemplate> <GroupTemplate> <div id="itemplaceholdertontainer" runat="server" style="width: l000px;"> <div id="itemPlaceholder" runat="server"> </div> </div> </GroupTemplate> </asp:ListView>
Veri kaynağı için basit ve hızlı bir çözüm, dosyalar.
Listview1.DataSource = from file in new DirectoryInfo("C:\\windows").GetFiles() orderby file.Name select new { file.Name, file.Length, file.FullName, file.Attributes }; Listview1.DataBind();
Dosyaları biraz süslü gösterelim.
string path = Request["path"]; Icon ico = Icon.ExtractAssociatedIcon(path); Bitmap bmp = new Bitmap(ico.Width, ico.Height); Graphics g = Graphics.FromImage(bmp); g.DrawIcon(ico, new Rectangle(0, 0, ico.Width, ico.Height)); bmp.Save(Response.OutputStream, ImageFormat.Png); g.Dispose(); bmp.Dispose(); ico.Dispose();
Geçenlerde 70-528 kitabını karıştırıken aklıma geldi, yazayım dedim.
Javascript fonksiyonları;
function toCharArray(text, splitter) { return text.split(splitter); } function newString(charArray) { var text = ''; for (var i = 0; i < charArray.length; i++) text += charArray[i]; return text; } function splitlT() { var text = document.getElementByld('text').value; var array = toCharArray(text, ''); var span = document.getElementByld('sp'); span.innerHTML = array; } function joinlT() { var text = document.getElementByld('sp').innerHTML; var array = toCharArray(text, ''); document.getElementByld('sp').innerHTML = newString(array); }
Html test kodları;
<div> text : <input type="text" id="text" value="outlook" /> <br /> <input type="button" value="Char" onclick="splitIT()" /> <input type="button" value="String" onclick="joinIT()" /> <br /> <span id="sp"></span> </div>
Web uygulamaları geliştirirken MasterPage kontrolü kullanıldığında içerik sayfalarında kullanılan sunucu kontrolleri istemci tarafında farklı isimlendirilir. Örneğin, Name özelliği txtAd olan TextBox kontrolünün istemci tarafında aldığı id değeri ctl00_ContentPlaceHolder1_txtAD olacaktır. Bu durumda istemci tarafındaki javascript fonksiyonundan kontrollere erişim çok pratik olmayacaktır. Şimdi bu durum karşısında nasıl bir tavır takınacağımıza bakalım :) Örneğimizde, içerik sayfasında bulunan 4 adet TextBox kontrolünün Text özelliğini temizleyen bir javascript fonksiyonumuz olacak.
Nasıl ki MasterPage kontrolü, karışıklığı engellemek için kontrollerin id özelliklerine öneki contentplaceholder ekliyorsa, bizde temizlemek istediğimiz kontrolleri, id özelliği region1 olan bir div içinde kullandık. Daha sonra div içindeki tüm input kontrollerini aldık ve özelliği text olanları temizledik.