C# MVC页面状态保存

本文介绍了一种在ASP.NET MVC应用中保存和读取页面状态的方法,通过自定义Model和Controller实现页面配置的保存与获取,利用MD5加密确保URL唯一性,适用于需要跨请求维护状态的场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一丶在model文件夹中新建类

       //所选节点Id
        private string selectNodeId;

        //所选节点名称
        private string selectNodeName;

        //统计类型
        private string statType;

        //数据类型
        private string type;

        //时间
        private DateTime dt = DateTime.Now;

        //开始时间
        private DateTime bt = DateTime.Now;

        //结束时间
        private DateTime et = DateTime.Now;

        //页面URL地址
        private string pageUrl;

        //单位
        private string unit;
       /// <summary>
        /// 所选节点Id
        /// </summary>
        public string SelectNodeId
        {
            get { return selectNodeId; }
            set { selectNodeId = value; }
        }
        /// <summary>
        /// 所选节点名称
        /// </summary>
        public string SelectNodeName
        {
            get { return selectNodeName; }
            set { selectNodeName = value; }
        }
        /// <summary>
        /// 统计类型
        /// </summary>
        public string StatType
        {
            get { return statType; }
            set { statType = value; }
        }

        /// <summary>
        /// 类型
        /// </summary>
        public string Type
        {
            get { return type; }
            set { type = value; }
        }
        /// <summary>
        /// 时间
        /// </summary>
        public DateTime Dt
        {
            get { return dt; }
            set { dt = value; }
        }

        /// <summary>
        /// 开始时间
        /// </summary>
        public DateTime Bt
        {
            get { return bt; }
            set { bt = value; }
        }
        /// <summary>
        /// 结束时间
        /// </summary>
        public DateTime Et
        {
            get { return et; }
            set { et = value; }
        }
        /// <summary>
        /// 页面URL地址
        /// </summary>
        public string PageUrl
        {
            get { return pageUrl; }
            set { pageUrl = value; }
        }

        /// <summary>
        /// 单位
        /// </summary>
        public string Unit
        {
            get { return unit; }
            set { unit = value; }
        }

二丶新建控制器BasesController

       /// <summary>
        /// 获取当前页面地址
        /// </summary>
        /// <returns>页面地址</returns>
        public string GetPageUrl()
        {
            var pageUrl = System.Web.HttpContext.Current.Request.FilePath;
            return pageUrl != null ? pageUrl.ToString() : string.Empty;
        }

        /// <summary>
        ///保存配置
        /// </summary>
        /// <param name="pageUrl"></param>
        /// <param name="settingName"></param>
        /// <param name="settingValue"></param>
        /// <returns></returns>
        public ContentResult ProcessData_SaveSettings(string pageUrl, string settingName, string settingValue)
        {
            //获取url的MD5值
            var urlMD5 = ProcessData_Url(pageUrl);
            // 判断更新或添加
            var isExit = ProcessData_IsExit(pageUrl, settingName);
            //创建Model
            var sysSetting = ProcessData_SettingModel(urlMD5, settingName, settingValue, isExit.Id);

            var result = InvokeAPI_COM_Setting_Add(sysSetting);

            return Content(result.ToString());
        }

        /// <summary>
        /// 根据地址获取页面所有配置
        /// </summary>
        /// <param name="pageUrl">页面地址</param>
        /// <returns></returns>
        public List<COM_SettingModel> ProcessData_GetPageSetting(string pageUrl)
        {
            //获取url的MD5值
            var urlMD5 = ProcessData_Url(pageUrl);
            var settings = InvokeAPI_COM_Setting_GetBysystemIduserId();
            settings = settings.Where(p => p.pageUrl == urlMD5).ToList();
            return settings;
        }
        辅助方法:
          /// <summary>
        /// 获取地址的MD5值
        /// </summary>
        /// <param name="parentUrl"></param>
        /// <returns></returns>
        private string ProcessData_Url(string parentUrl)
        {
            MD5 md = MD5CryptoServiceProvider.Create();
            byte[] hash;
            UTF8Encoding enc = new UTF8Encoding();
            byte[] buffer = enc.GetBytes(parentUrl == null ? "" : parentUrl);
            hash = md.ComputeHash(buffer);
            StringBuilder sb = new StringBuilder();
            foreach (byte b in hash)
                sb.Append(b.ToString("x2"));
            return sb.ToString();
        }

        /// <summary>
        /// 配置Model
        /// </summary>
        /// <param name="pageUrl"></param>
        /// <param name="settingName"></param>
        /// <param name="settingValue"></param>
        /// <returns></returns>
        private COM_SettingModel ProcessData_SettingModel(string pageUrl, string settingName, string settingValue, string Id)
        {  //创建Model
            var sysSetting = new COM_SettingModel()
            {
                systemId = USER.SystemID,
                userId = USER.UserName,
                pageUrl = pageUrl,
                type = settingName,
                value = settingValue,
                memo = "",
            };
            if (string.IsNullOrEmpty(Id))
            {
                sysSetting.Id = Guid.NewGuid().ToString();
            }
            else
            {
                sysSetting.Id = Id;
            }
            return sysSetting;
        }

        /// <summary>
        /// 判断配置是否存在
        /// </summary>
        /// <param name="pageUrl"></param>
        /// <param name="settingName"></param>
        /// <returns></returns>
        private COM_SettingModel ProcessData_IsExit(string pageUrl, string settingName)
        {
            var settings = ProcessData_GetPageSetting(pageUrl);
            settings = settings.Where(p => p.type == settingName).ToList();
            if (settings.Any())
                return settings.First();
            else
                return new COM_SettingModel();
        }

三丶在要保存页面状态的类中继承新建的BasesController类

 /// <summary>
        /// 保存状态
        /// </summary>
        /// <returns></returns>
        public BaseParameterModel ProcessData_GetQueryTerms()
        {
            var model = new BaseParameterModel();
            //获取页面地址
            var pagrUrl = GetPageUrl();
            model.PageUrl = pagrUrl;
            //获取页面配置
            var settings = ProcessData_GetPageSetting(pagrUrl);
            var btSettings = settings.Where(p => p.type == "test5").ToList();
            if (btSettings.Any())
            {
                if (btSettings[0].value!="")
                {

                    var statTime = btSettings.First().value;

                    model.Type = statTime;
                }
            }
            else
            {
                model.Bt = DateTime.Now;
            }
            return model;
        }

四丶视图代码示例
在这里插入图片描述
五丶js代码

$(function () {
    //注册事件
    SaveSettings();//下拉框数据绑定
    GetTime();//根据时间范围查询
  
})
//状态保存
function GetTime() {
    $(".btn_GetPeo").click(function () {
        var Username = document.getElementById("test5").value;
        {
            var obj = new Object();
            obj["name"] = $("#test5").val();
            var Time = obj["name"].split(' - ');
            var beginTime = Time[0];
            var endTime = Time[1];
            obj["beginTime"] = beginTime;
            obj["endTime"] = endTime;
            LoadData("?beginTime=" + obj["beginTime"]+"&endTime=" + obj["endTime"])
            SaveSettings()//状态保存
        }
    })
}

//状态保存
function SaveSettings(pageUrl, settingName, settingValue) {
    var Username = document.getElementById("test5").value;
    var pageUrl = $("#PageUrl").val();
    var settingName = "test5";
    var settingValue = $("#test5").val();
    // 提交保存
    $.ajax({
        cache: true,
        type: "POST",
        url: "../../Bases/ProcessData_SaveSettings",
        data: { pageUrl: pageUrl, settingName: settingName, settingValue: settingValue },
        async: false,
        error: function (result) {
            //alert("保存失败");
        },
        success: function (result) {
            //alert("保存成功");
        }
    });
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值