【C#MVC工具】C#MVC中使用Dictionary

今天封装了一个工具类,具体作用是将Request传递过来的参数放到Dictionary中,可以对参数进行优化,也可以减少大量的重复代码。
从java转到C#的我,最初最难受的就是从页面传值到控制器中时,无法获取装到一个类“Map”的集合框架中。在java中,直接有api帮我们做这件事:Request.parameterMap();而C#做MVC时,并没有这个api,只能用Request.Parameter[key];这样就造成了大量的重复代码;且c#在各层进行参数传递时,有时参数列表很长,同一个对象的参数还好说,可以封装到一个Objet中,若参数来自不同的对象中呢?这时候就很麻烦了。
这里也可以通过这个解决。有没有可能对其进行封装,并加以优化呢。这里推出一个工具类,PageData。

PagaData:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web;

namespace SAM.Common
{
    public class PageData:Dictionary<object,object>,IDictionary<object,object>
    {
        IDictionary<object, object> dictionary = null;
        HttpRequestBase request = null;

        public PageData(HttpRequestBase request) {
            this.request = request;
            Dictionary<object, object> returnDictory = new Dictionary<object, object>();
            string[] keys = request.Form.AllKeys; //Set
            if(keys.Count() == 0)
            {
                keys = request.QueryString.AllKeys; //Get
            }
            foreach(string name in keys){
                string value = request.Params[name].ToString().Trim();
                returnDictory.Add(name,value);
            }
            dictionary = returnDictory;
        }

        public PageData()
        {
            dictionary = new Dictionary<object, object>();
        }

        public Object Get(object key) 
        {
            return dictionary[key];
        }

        //public DateTime GetDateTime(object key) {
        //    if (key != null)
        //    {
        //        return Utility.ConvertToDatetime(dictionary[key]);
        //    }
        //    else 
        //    {
        //        return DateTime.Now;                
        //    }
        //}

        //public Int32 GetInt32(object key) 
        //{
        //    return Utility.ConvertToInt32(dictionary[key]);
        //}

        public Object this[object key] {
            get { return dictionary[key]; }
            set { }
        }

        public void Add(object key, object value)
        {
            dictionary.Add(key,value);
        }

        public bool ContainsKey(object key)
        {
            return dictionary.ContainsKey(key);
        }

        public ICollection<object> Keys
        {
            get { return dictionary.Keys; }
        }

        public bool Remove(object key)
        {
            return dictionary.Remove(key);
        }


        public ICollection<object> Values
        {
            get { return dictionary.Values; }
        }


        public void Add(KeyValuePair<object, object> item)
        {
            dictionary.Add(item);
        }

        public void Clear()
        {
            dictionary.Clear();
        }

        public bool Contains(KeyValuePair<object, object> item)
        {
            return dictionary.Contains(item);
        }

        public void CopyTo(KeyValuePair<object, object>[] array, int arrayIndex)
        {
            dictionary.CopyTo(array,arrayIndex);
        }

        public int Count
        {
            get { return dictionary.Count; }
        }

        public bool IsReadOnly
        {
            get { return dictionary.IsReadOnly; }
        }

        public bool Remove(KeyValuePair<object, object> item)
        {
            return dictionary.Remove(item);
        }

        public IEnumerator<KeyValuePair<object, object>> GetEnumerator()
        {
            return dictionary.GetEnumerator();
        }

    }
}

这里有两个构造函数,第一个就是你在action中,通过Request,获取到页面传递的数据。第二个就是你可以把PagaData当做一个Dictionary类来使用。

在action如何调用呢?
你可以在你的BaseController中,添加一个Get方法。然后用Conntroller继承BaseController,这个BaseController还可以做其他操作,例如Session的检查,异常信息的捕获,日志信息等。

BaseController:

using SAM.Common;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace SAM.Web.Controllers
{
    public class BaseController : Controller
    {
        //
        // GET: /Base/
        protected override void OnException(ExceptionContext filterContext)
        {
            base.OnException(filterContext);
            string errorMessage = LogHelper.RecordError(filterContext.Exception);
            filterContext.ExceptionHandled = true;
            filterContext.HttpContext.Response.Redirect("/Login/ErrorPage?msg=" + errorMessage);//跳转至错误提示页面
        }

        protected override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            base.OnActionExecuting(filterContext);
            if (Session[SessionKey.USER_MASTER] == null || Session[SessionKey.COMPANY_INFORMATION] == null)
            {
                Response.Redirect("/Login/ReLogin");                
            }
        }

        public PageData GetPageData()
        {
            return new PageData(this.Request);
        }

    }
}

调用:
Controller:

PageData pd = this.GetPageData();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值