int id = Request.QueryString [“id”] == null? 0: Convert.ToInt32 (Request.QueryString [“id”]);
[AttributeUsage (AttributeTargets.Field | AttributeTargets.Property, Inherited = false, AllowMultiple = false)] sealed public class QueryStringBindingAttribute: Attribute { public string QueryStringItem { get; private set; } public bool ThrowOnNull { get; private set; } public object DefaultValue { get; private set; } public QueryStringBindingAttribute (string p_queryStringItem) { SetQueryStringBindingAttribute (p_queryStringItem, false, null); } public QueryStringBindingAttribute (string p_queryStringItem, bool p_throwOnNull) { SetQueryStringBindingAttribute (p_queryStringItem, p_throwOnNull, null); } public QueryStringBindingAttribute (string p_queryStringItem, bool p_throwOnNull, object p_defaultValue) { SetQueryStringBindingAttribute (p_queryStringItem, p_throwOnNull, p_defaultValue); } void SetQueryStringBindingAttribute (string p_queryStringItem, bool p_throwOnNull, object p_defaultValue) { if (String.IsNullOrEmpty (p_queryStringItem)) throw new Exception (Properties.Settings.Default.InvalidParamsError); this.QueryStringItem = p_queryStringItem; this.ThrowOnNull = p_throwOnNull; this.DefaultValue = p_defaultValue; } }
public class QueryStringBinding { Page page; public QueryStringBinding (Page p_page) { if (p_page == null) throw new Exception ("Invalid parameter"); this.page = p_page; } private void SetMemberValue (MemberInfo p_member, object value) { if (p_member == null) throw new Exception ("Invalid parameter"); Type _memberType = p_member.GetMemberType (); if (_memberType == typeof (string)) { p_member.SetValue (page, value.ToString ()); } else if (_memberType == typeof (bool)) { p_member.SetValue (page, Convert.ToBoolean (value)); } else if (_memberType == typeof (int)) { p_member.SetValue (page, Convert.ToInt32 (value)); } else if (_memberType == typeof (int?)) { p_member.SetValue (page, Convert.ToInt32 (value)); } else if (_memberType == typeof (bool?)) { p_member.SetValue (page, Convert.ToBoolean (value)); } else throw new Exception (Properties.Settings.Default.UsupportedTypeError); } public void InitQueryStringProperties () { Type _type = page.GetType (). Namespace == null? page.GetType (): page.GetType (). BaseType; MemberInfo [] _members = _type.FindMembers (MemberTypes.Field | MemberTypes.Property, BindingFlags.DeclaredOnly | BindingFlags.Static | BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public, null, null); foreach (MemberInfo member in _members) { bool _isDef = Attribute.IsDefined (member, typeof (QueryStringBindingAttribute)); if (_isDef) { Attribute _attr = Attribute.GetCustomAttribute (member, typeof (QueryStringBindingAttribute)); string _requestItem = page.Request.QueryString [(_ attr as QueryStringBindingAttribute) .QueryStringItem]; if (! String.IsNullOrEmpty (_requestItem)) { SetMemberValue (member, _requestItem); } else { object _defaultValue = (_attr as QueryStringBindingAttribute) .DefaultValue; if (_defaultValue! = null) { SetMemberValue (member, _defaultValue); } else { if ((_attr as QueryStringBindingAttribute) .ThrowOnNull) throw new Exception (String.Format ("Parameter {0} was not specified in the query string", (_attr as QueryStringBindingAttribute) .QueryStringItem)); } } } } } }
[QueryStringBinding ("bankid")] public int? BankId {get; set; } [QueryStringBinding ("cityid", true)] public int CityId {get; set; } [QueryStringBinding ("branchId", false, 0)] public int BranchId {get; set; } protected override void OnInit (EventArgs e) { QueryStringBinding qsbObject = new QueryStringBinding (this); qsbObject.InitQueryStringProperties (); base.OnInit (e); }
Source: https://habr.com/ru/post/24930/
All Articles