ASP.Net İçin Düşündüğüm Alternatif Sayfa Modeli
-
Şimdi beyler daha önce sık sık söylediğim gibi razoru sevmeme rağmen MVC yi sevmiyorum. Request.Querystring altından değişkenleri okutmak gerekirse inte cevirmek, gerekirse özel karakterleri temizlemek de hem uğraştırıyo hem de bişey atlama şansı yüksek.
Onun yerine şöyle bişey düşündüm. SEO için de başka bi alternatifini yapiorum. Kullanımını 2. mesajda anlatıcam
using System; using System.Collections.Generic; using System.Reflection; using System.Web; using System.Web.WebPages; namespace BaseWeb { /* public abstract class BaseLayoutPage { public DateTime startTime = DateTime.Now; }*/ public abstract class BasePage : System.Web.WebPages.WebPage { // static int reqindex=0; public DateTime startTime = DateTime.Now; protected override void InitializePage() { base.InitializePage(); // Response.Write("Rendering Lang" + this.App.); foreach (PropertyInfo property in this.GetType().GetProperties()) //sadece bu sınıfın property lerini al. Temel sınıfınkilerini değil. { // Herbir property için DataColumn Attributelerini al foreach (Req field in property.GetCustomAttributes(typeof(Req), true)) { if (property.PropertyType == typeof(int)) { // if (field.index >= 0) // property.SetValue(this, int.Parse(Request.Url.Segments[field.index]), null); // else property.SetValue(this, (int)field, null); // break; } else if (property.PropertyType == typeof(string)) { string s = (string)field; /* if (field.index >= 0) if (Request.Url.Segments.Length <=( field.index + 2)) s = ""; else s = Request.Url.Segments[field.index+2]; */ switch (field.InputValidationType) { case Req.Validation.StripHtml: s = System.Text.RegularExpressions.Regex.Replace(s, @"<(.|\n)*?>", string.Empty, System.Text.RegularExpressions.RegexOptions.Compiled); break; case Req.Validation.StripQuotes: s = s.Replace("'", """); break; /* case Req.Validation.None: break; default: break;*/ } property.SetValue(this, s, null); // break; } else if (property.PropertyType == typeof(string[])) { property.SetValue(this, (string[])field, null); // break; } else if (property.PropertyType == typeof(bool)) { property.SetValue(this, (bool)field, null); // break; } // Console.WriteLine( field.isim +":"+ property.Name+":"+property.GetValue(this,null)); } } } #region CustomAttr [AttributeUsage(AttributeTargets.Class)] public class NonTranslatedPage : Attribute { } /* protected override void InitializeCulture() { // string clt = this.Culture; if (Session != null) { string lang = (string)(Session["Lang"]); if (String.IsNullOrEmpty(lang)) Session["Lang"] = "en"; string clt = BaseWeb.Functions.SetCulture(lang); } //base.InitializeCulture(); } */ protected bool IsNonTranslatedPage { get { return (GetType().GetCustomAttributes(typeof(NonTranslatedPage), true).Length > 0); } } #endregion /* public string _(string classname, string keystr) { return (string)this.GetGlobalResourceObject(classname, keystr); } */ public string Language { get { if (Session != null) { if (Session["Lang"] != null) return (string)Session["Lang"]; else return "en"; } else return "en"; } } #region RequestManager [AttributeUsage(AttributeTargets.Property)] public class Req : Attribute { public string isim = ""; public RequestType InputRequestType; public Validation InputValidationType; // public int index = -1; public enum RequestType { Both = 0, QueryString = 1, Form = 2 } public enum Validation { StripHtml, StripQuotes, None } public string validate(string s) { return s; } /* public Req() { index = reqindex++; } public Req(Validation inputValidationType) { index = reqindex++; InputValidationType = inputValidationType; } */ public Req(string s, RequestType ReqType) { isim = s; InputRequestType = ReqType; } public Req(string s, RequestType ReqType, Validation inputValidationType) { isim = s; InputRequestType = ReqType; InputValidationType = inputValidationType; } public Req(string s) { isim = s; } /* public static int getInt(string s ) { return getInt( s, RequestType.Both); }*/ public static int getInt(string s, RequestType q) { int r = 0; switch (q) { case RequestType.Both: if (string.IsNullOrEmpty(HttpContext.Current.Request[s])) return 0; else if (int.TryParse(HttpContext.Current.Request[s], out r)) return r; else return 0; // break; case RequestType.QueryString: if (string.IsNullOrEmpty(HttpContext.Current.Request.QueryString[s])) return 0; else if (int.TryParse(HttpContext.Current.Request.QueryString[s], out r)) return r; else return 0; // break; case RequestType.Form: if (string.IsNullOrEmpty(HttpContext.Current.Request.Form[s])) return 0; else if (int.TryParse(HttpContext.Current.Request.Form[s], out r)) return r; else return 0; // break; default: return 0; // break; } } /* public static string getString(string s) { return getString( s, InputRequestType); }*/ public static bool getBool(string s, RequestType q) { string boolstr = ""; switch (q) { case RequestType.Both: if (string.IsNullOrEmpty(HttpContext.Current.Request[s])) return false; boolstr = HttpContext.Current.Request[s]; break; case RequestType.QueryString: if (string.IsNullOrEmpty(HttpContext.Current.Request.QueryString[s])) return false; else boolstr = HttpContext.Current.Request.QueryString[s]; break; case RequestType.Form: if (string.IsNullOrEmpty(HttpContext.Current.Request.Form[s])) return false; else boolstr = HttpContext.Current.Request.Form[s]; break; // default: return ""; // break; } boolstr = boolstr.ToLowerInvariant(); if (boolstr == "1") return true; if (boolstr == "true") return true; if (boolstr == "yes") return true; return false; } public static string getString(string s, RequestType q) { switch (q) { case RequestType.Both: if (string.IsNullOrEmpty(HttpContext.Current.Request[s])) return ""; else return HttpContext.Current.Request[s]; // break; case RequestType.QueryString: if (string.IsNullOrEmpty(HttpContext.Current.Request.QueryString[s])) return ""; else return HttpContext.Current.Request.QueryString[s]; // break; case RequestType.Form: if (string.IsNullOrEmpty(HttpContext.Current.Request.Form[s])) return ""; else return HttpContext.Current.Request.Form[s]; // break; default: return ""; // break; } } /* public static string[] getStrings(string s) { return getStrings(s, InputRequestType); }*/ public static string[] getStrings(string s, RequestType q) { switch (q) { case RequestType.Both: if (string.IsNullOrEmpty(HttpContext.Current.Request[s])) return null; else return HttpContext.Current.Request[s].Split(new char[] { ',' }, StringSplitOptions.None); // break; case RequestType.QueryString: if (string.IsNullOrEmpty(HttpContext.Current.Request.QueryString[s])) return null; else return HttpContext.Current.Request.QueryString[s].Split(new char[] { ',' }, StringSplitOptions.None); // break; case RequestType.Form: if (string.IsNullOrEmpty(HttpContext.Current.Request.Form[s])) return null; else return HttpContext.Current.Request.Form[s].Split(new char[] { ',' }, StringSplitOptions.None); // break; default: return null; // break; } } public static implicit operator System.Int32(Req v_Value) { return getInt(v_Value.isim, v_Value.InputRequestType); } public static implicit operator System.String(Req v_Value) { return getString(v_Value.isim, v_Value.InputRequestType); } public static implicit operator System.String[](Req v_Value) { return getStrings(v_Value.isim, v_Value.InputRequestType); } public static implicit operator bool(Req v_Value) { return getBool(v_Value.isim, v_Value.InputRequestType); } } #endregion } }
-
// Webforms değil razorsa public abstract olcak aşağıdaki public partial class Default:BasePage //Her sayfada deminki classtan türetcez { [Req("email", Req.RequestType.QueryString, Req.Validation.StripHtml)] public string Email { get; set; } [Req("UndoEmail", Req.RequestType.Form, Req.Validation.StripHtml)] public string UndoEmail { get; set; } [Req("ID")] public int ID{ get; set; } [Req("isimler")] public string[] isimler{ get; set; } // virgulle ayrilmis listeyi otomatik listeye alacak [Req("ID2", Req.RequestType.Both)] public int ID2{ get; set; } protected void Page_Load(object sender, EventArgs e) { //degiskenlerimiz otomatik olarak doldu burada kolayca kullanabilirsiniz Response.Write(Email); Response.Write(ID.ToString()); } .... }
HolyOne tarafından 16/Nis/14 12:14 tarihinde düzenlenmiştir -
breh breh üşenmedin mi aq.
-
1234567B bunu yazdı
breh breh üşenmedin mi aq.
microsoft neden bole yapmior diye dusunmekten gece uyku tutmadı hocam, performans olarak da bi eksiği yok
-
HolyOne bunu yazdı1234567B bunu yazdı
breh breh üşenmedin mi aq.
microsoft neden bole yapmior diye dusunmekten gece uyku tutmadı hocam, performans olarak da bi eksiği yok
valla abi sana pes diyorum :D
-
1234567B bunu yazdıHolyOne bunu yazdı1234567B bunu yazdı
breh breh üşenmedin mi aq.
microsoft neden bole yapmior diye dusunmekten gece uyku tutmadı hocam, performans olarak da bi eksiği yok
valla abi sana pes diyorum :D
seyhın beynının bı kopyasını ıstıyorum :P
-
Tamam mvcyle sorunun çözüldüğüne göre tarikatı asp.nete geçirirsin yavaş yavaş şeyhim ? :D
-
Ne kadar etkisi olur bilmem ama başta bir reflection kullanmışın, o performansa eksi olarak yansır muhtemelen ama kolaylık sağladıktan sonra performans mühim değil.
Sanırım query'den gelen değerleri type safe olarak alıyorsun değilm mi?
Edit: ikinci postu şimdi gördüm, Hacı bildiğin C siz MVC yapmışın :D, az kaldı MVC'ye alıcaz seni de.
nessaj tarafından 16/Nis/14 14:46 tarihinde düzenlenmiştir