美文网首页
易忘记代码记录

易忘记代码记录

作者: 漫漫江雪 | 来源:发表于2017-08-10 09:19 被阅读0次

1、C# Split分割字符串的方法使用

if (!string.IsNullOrEmpty(query.SchoolTime))
{
    var arr = string.Join(",", query.SchoolTime.Split(new char[]{'-'}, StringSplitOptions.RemoveEmptyEntries).Select(c=>string.Format("'{0}'",c.Trim())));
    searchSql += string.Format(" and c.Grade in({0})",arr);
}

var tasknotifiIds = string.Join(",", result.Data.Select(v => string.Format("'{0}'", v.Id)));

2、jQuery序列化表单数据
serialize()、serializeArray()方法都是jQuery用户序列化表单的,用于ajax提交的data值的序列化
var dataParam = $("#updateChannelForm").serializeArray();
例如我想添加sex="男"
dataParam.push({"name":"sex","value":"男"}) 就可以了
我们看到serialize()方法把表单里的内容序列化成了字符串
"id=58&channelType=2&subTitle=591teststetets&extAttrValueId=599"

那么我们只需这要添加额外的内容:
var dataParam = $("#updateChannelForm").serialize();
例如我想添加sex="男"
dataParam =dataParam +"&"+"sex=男"
参考出处:http://blog.csdn.net/csdnzhangtao5/article/details/52981541

var formData = $form.serialize();
formData += '&CourseId=@course.Id&TermId=@term.Id';
formData = formData.replace(/\+/g, " ");  //jquery的serialize将空格变成了+,替换回来

3、jQuery closest() 方法获得匹配选择器的第一个祖先元素,从当前元素开始沿 DOM 树向上。

$(document).bind("click", function( e ) {
    $( e.target ).closest("li").toggleClass("hilight");
});

4、Dynamic动态参数

dynamic param = new ExpandoObject();
            param.StudentId = studentId;

            if (!string.IsNullOrEmpty(courseId))
            {
                sql += " and b.CourseId=@CourseId";
                param.CourseId = courseId;
            }
            var model = await _baseService.GetList<ExameScoreModel>(sql, param);
            return model;

5、处理input type="number"输入e的问题,及maxlength不起作用

<span class="mr-40"><input type="number" min="0" max="999" name="TotalScore" value="@Model.TotalScore" oninput="handleScore(this,3)" class="form-control" onkeypress="return(/[\d]/.test(String.fromCharCode(event.keyCode)))" /> 分</span>

function handleScore(obj, len) {  //处理数字输入
            //if (obj.value) {obj.value = obj.value.replace(/[^0-9]/, ""); }
            if (obj.value.length > len) { obj.value = obj.value.slice(0, len); }
            if (obj.value < 0) { obj.value = 0; }
        }

6、基于声明的登录和退出
http://www.cnblogs.com/dudu/p/6367303.html

var identity = new ClaimsIdentity(DefaultAuthenticationTypes.ApplicationCookie);
identity.AddClaim(new Claim(ClaimTypes.NameIdentifier, user.Id));
identity.AddClaim(new Claim(ClaimTypes.Name, user.UserName));
identity.AddClaim(new Claim(ClaimTypes.Sid, school.Id));
AuthenticationManager.SignOut(DefaultAuthenticationTypes.ApplicationCookie);
AuthenticationManager.SignIn(new AuthenticationProperties { IsPersistent = model.RememberMe }, identity);

//退出
AuthenticationManager.SignOut(DefaultAuthenticationTypes.ApplicationCookie);
return RedirectToAction("Login", "Account");

/*
IList<Claim> claimCollection = new List<Claim>
            {
                new Claim(ClaimTypes.Name, "Andras")
                , new Claim(ClaimTypes.Country, "Sweden")
                , new Claim(ClaimTypes.Gender, "M")
                , new Claim(ClaimTypes.Surname, "Nemes")
                , new Claim(ClaimTypes.Email, "hello@me.com")
                , new Claim(ClaimTypes.Role, "IT")
            };
 
            ClaimsIdentity claimsIdentity = new ClaimsIdentity(claimCollection, "My e-commerce website");
 
            //Console.WriteLine(claimsIdentity.IsAuthenticated);
 
            ClaimsPrincipal principal = new ClaimsPrincipal(claimsIdentity);
            Thread.CurrentPrincipal = principal;
            //actionContext.RequestContext.Principal = principal;
*/

7、基于Forms身份验证的关键代码:
Web.Config配置

<authentication mode="Forms">
      <!--<forms loginUrl="~/Account/Login" timeout="2880" />-->
      <forms cookieless="UseCookies" name="LoginCookieName" timeout="2880" loginUrl="~/Home/Login" path="/"/>
    </authentication>
/// <summary>
        /// 验证后台用户名和密码
        /// </summary>
        /// <param name="UserName"></param>
        /// <param name="Pwd"></param>
        /// <returns></returns>
        [AllowAnonymous]
        public ActionResult LoginValidate(string UserName, string UserPwd)
        {
            BackResult backResult;
            string md5Pwd = UserPwd.MD5();   //MD5加密后的密码
            MS.Model.SysUser user = new SysUser_BLL().LoginValidate(UserName, md5Pwd);
            if (user != null)
            {
                //为提供的用户名提供一个身份验证的票据
                FormsAuthentication.SetAuthCookie(UserName, true, FormsAuthentication.FormsCookiePath);
                //把用户对象保存在票据里
                string userData = JsonConvert.SerializeObject(user);
                FormsAuthenticationTicket Ticket = new FormsAuthenticationTicket(1, UserName, DateTime.Now, DateTime.Now.AddTicks(FormsAuthentication.Timeout.Ticks), false, userData);
                //加密票据
                string hashTicket = FormsAuthentication.Encrypt(Ticket);
                HttpCookie userCookie = new HttpCookie(FormsAuthentication.FormsCookieName, hashTicket);
                Response.Cookies.Add(userCookie);

                //登录成功之后,改写用户的最后一次登录时间及增加登录次数
                new SysUser_BLL().ModifyLoginInfo(user);

                string loginIP = Util.ClientIP;
                LogHelper.WriteOpLog(new SysLog { OpTit = "登录", Operator = UserName, OpPage = "登录页面", OpTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), OpType = OpType.登录, OpIP= loginIP });

                backResult = new BackResult { status = 100, msg = "通过身份验证!" };
            }
            else
            {
                backResult = new BackResult { status = 200, msg = "用户名或密码不正确!" };
            }
            return Json(backResult, JsonRequestBehavior.AllowGet);
        }
        [AllowAnonymous]
        public void LogOut()   //退出登录
        {
            FormsAuthentication.SignOut();
        }

BaseController

[Authorize]
    public class BaseController : Controller
    {
        public string LoginUser
        {
            get
            {
                HttpCookie authCookie = HttpContext.Request.Cookies[FormsAuthentication.FormsCookieName];//获取cookie 
                if (authCookie != null)
                {
                    FormsAuthenticationTicket Ticket = FormsAuthentication.Decrypt(authCookie.Value);//解密 
                    MS.Model.SysUser loginUser = JsonConvert.DeserializeObject<MS.Model.SysUser>(Ticket.UserData);//反序列化

                    return loginUser;
                }
                else
                {
                    return null;
                }
            }
        }
        protected override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            //获取区域
            var area = filterContext.RouteData.DataTokens;//MVC可以有区域的,这里就是负责存放区域的

            //获取区域名称
            var areaName = area["area"];//这个["area"]是写死了的。你根据["area"]就可以取到区域名称,因为区域的key固定就是area

            string controllerName = (string)filterContext.RouteData.Values["controller"];  //控制器名称
            string actionName = (string)filterContext.RouteData.Values["action"]; //Action方法名称

            //TODO:根据用户所属的角色,用户权限判断用户是否具有访问这个 区域下controller的action方法
        }
    }

8、Html拼接时正则替换,免得每次手敲

(.+) -> html+='$0';
Paste_Image.png

9、WebForm中的文件下载

string fileName = lb_file.Text;//客户端保存的文件名
            string filePath = Server.MapPath("~/Report/" + fileName);//路径
            if (!File.Exists(filePath))
            {
                MessageBox.Show(this, "文件已经删除!无法下载!"); return;
            }
            //以字符流的形式下载文件
            var fs = new FileStream(filePath, FileMode.Open);
            var bytes = new byte[(int)fs.Length];
            fs.Read(bytes, 0, bytes.Length);
            fs.Close();
            Response.ContentType = "application/octet-stream";
            //通知浏览器下载文件而不是打开
            Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(fileName, Encoding.UTF8));
            Response.BinaryWrite(bytes);
            Response.Flush();
            Response.End();

MVC文件下载:http://www.cnblogs.com/insus/p/3615714.html

10、阻止浏览器按F5刷新页面

$(document).keydown(function (e) {
                if (e.keyCode === 116) {
                    layer.confirm('如果您正在上传资料请不要刷新当前页', {
                        btn: ['确定刷新', '取消'] //按钮
                    }, function () {
                        window.location.reload();
                    });
                    return false;
                }
            });
//原生js写法
document.onkeydown = function (e) {
            var ev = window.event || e;
            var code = ev.keyCode || ev.which;
            if (code == 116) {
                return false;
            }
        }

11、select下拉框设置了multiple时,变成了多行展示,撑高了原有的展示区域
解决方式,再加上 size="1"

<form action="xxx" method="post">
    <label>爱好:</label>
    <select multiple="multiple" size="1">
      <option value="看书">看书</option>
      <option value="旅游">旅游</option>
      <option value="运动">运动</option>
      <option value="购物">购物</option>
    </select>
</form>

12、zTree树

function loadTreeData(url, key, selectNodeId) {
    $.post(url, { key: key }, function (data) {
        if (data && data.Tree) {
            $("span[name='SchoolIndicator']").text(data.SchoolIndicator);
            $("span[name='MajorIndicator']").text(data.MajorIndicator);
            bindTree(data.Tree, selectNodeId);
        }
    });
}

function bindTree(data, selectNodeId) {
    var zTree = $.fn.zTree.init($("#treeDemo"), setting, data);
    if (data.length > 0) {
        var nodes = zTree.getNodes();
        var node = getChildren(nodes[0]);
        if (selectNodeId) {
            node = zTree.getNodeByParam('Id', selectNodeId);
        }
        if (node) {
            if ($.trim($("#indicatorKey").val()) === "") {
                zTree.expandNode(node);
            } else {
                zTree.expandAll(true);
            }
            zTree.selectNode(node);
            treeNodeSelected(node);
        }
        setTimeout("$('.scroll-pane').jScrollPane()", 150);
    } else {
        resetStyle();
    }
}

///获取第一个叶子节点
function getChildren(treeNode) {
    var childrenNodes = treeNode.children;
    if (childrenNodes) {
        return getChildren(treeNode.children[0]);
    } else {
        return treeNode;
    }
}

function treeNodeSelected(node) {
    selectedNode = node;
    setButtonStyle(node);
    if (node.isParent) {
        loadCatalogData(node);
    } else {
        loadContentData(node);
    }
}

function getPath(node) {
    var paths = [];
    while (node != null) {
        paths.push(node.IndicatorName);
        node = node.getParentNode();
    }
    var strPath = paths.reverse().join("&gt;&gt;");
    //if (strPath.length > 70) {
    //    strPath = strPath.substr(0, 70) + '...';
    //}
    return strPath;
}

用while过滤掉没有叶子节点的父级

public async Task<List<SelectTreeModel>> GetMajorTreeNew(string key,bool parentNodeNoCheck = true)
        {
            var orgList = (await _organizationService.GetAllOrgnization()).ToList();
            var majorList = (await _majorService.GetAllList()).ToList();

            if (orgList.Count > 0 && majorList.Count > 0)
            {
                Dictionary<string,Organization> hasChildrenDic=new Dictionary<string, Organization>();  //有叶子节点的父级
                var distinctParents = majorList.Where(c=>c.OrganizationId.Trim().Length>0).Select(c => c.OrganizationId).Distinct().ToList();
                
                for (int i = 0; i < distinctParents.Count(); i++)
                {
                    var node = orgList.FirstOrDefault(c => c.Id == distinctParents[i]);
                    if (node == null) continue;
                    hasChildrenDic.Add(distinctParents[i],node);

                    Organization tempOrg = orgList.FirstOrDefault(c=>c.Id==node.ParentId);
                    if (tempOrg != null)
                    {
                        while (tempOrg != null && tempOrg.Id.Length>1)
                        {
                            if (!hasChildrenDic.ContainsKey(tempOrg.Id))
                            {
                                hasChildrenDic.Add(tempOrg.Id, tempOrg);
                                tempOrg = orgList.FirstOrDefault(c => c.Id == tempOrg.ParentId);
                            }
                            else
                            {
                                tempOrg = null;
                            }
                        }
                    }
                }
                var itreeList = hasChildrenDic.Select(ic => new SelectTreeModel
                {
                    Id = ic.Value.Id,
                    Pid = ic.Value.ParentId,
                    name = ic.Value.OrgName,
                    isParent = true,
                    nocheck = parentNodeNoCheck,
                    Open = true,
                    Sort = ic.Value.Sort
                }).ToList();

                itreeList.AddRange(from v in majorList
                                   where orgList.FirstOrDefault(d => d.Id == v.OrganizationId) != null
                                   select new SelectTreeModel()
                                   {
                                       Id = v.Id,
                                       Pid = v.OrganizationId,
                                       name = v.MajorName,
                                       nocheck = false,
                                       isParent = false,
                                       Open = true,
                                       Sort = 10000
                                   });

                var result = GetSelectTree(itreeList, key);
                return result.OrderBy(d => d.Sort).ToList();
            }
            return null;
        }

13、C#扩展方法 GroupBy

//先对老师学期内的月数据分组求和
var grouped = details.GroupBy(o => new { o.OrgName, o.EmployeeId }).Select(g => new
                {
                    g.Key.OrgName,
                    totalHour = g.Sum(c => c.ConfirmClassHour)
                }).GroupBy(c => c.OrgName).ToDictionary(o => o.Key, o => o.Count(c => c.totalHour < 150));


query.GroupBy(q => new { q.Year, q.Month })  
    .Select(q => new  
    {  
        Year = q.Key.Year,  
        Month = q.Key.Month,  
        BuildAmount = q.Sum(i => i.BuildAmount),  
        RecAmount = q.Sum(i => i.RecAmount),  
        Amount = q.Sum(i => i.Amount),  
        RealAmount = q.Sum(i => i.RealAmount)  
    }); 

//Linq方式
var query = from l in list    
            group l by new { l.Name, l.BatNum } into g    
            select new    
            {    
                Name = g.Key.Name,    
                Count = g.Sum(a => a.Count),    
                BatNum = g.Key.BatNum    
            }; 

Dictionary<string,decimal> buildList = _build.FindList().GroupBy(q => q.SaleCode)  
        .Select(q => new { Code = q.Key, ReaAmount = q.Sum(i => i.RealAmount) })  
        .ToDictionary(q => q.Code, q => q.ReaAmount); 

14、JsonConvert格式化日期格式

var tables = details.OrderByDescending(o => o.AccidentTime).ToList();
 return JsonConvert.SerializeObject(tables,new IsoDateTimeConverter(){DateTimeFormat = "yyyy-MM-dd"});

相关文章

  • 易忘记代码记录

    1、C# Split分割字符串的方法使用 2、jQuery序列化表单数据serialize()、serialize...

  • 我的 iOS 学习小记

    啰嗦一句 之前使用的博客系统似乎要停掉了, 自己经常会记录一些易忘记的代码片段, 还是拷贝到简书来吧...简书不支...

  • JS倒计时效果

    直接记录下代码以防忘记: 一.代码注释: (1).$(function(){}),当文档结构完全加载完毕再去执行函...

  • js中json项字符串转对象

    废话不多说,直接上核心代码,怕忘记做点记录! for (let key in json) { if(json[...

  • svn提交代码

    使用svn提交代码到服务器,做简单的记录以防忘记。 ./表示当前目录 添加所有文件 提交代码。 同步代码: 添加新...

  • 易混淆易忘记

    1、base和nofollow 1、base 可以设置整体链接的打开状态< base target="_blank...

  • 原生js获取地址栏参数

    ps: 项目太忙,忘记从哪搬来的了,做个记录收藏一下 主要方法代码 2.方法应用代码 3.效果查看

  • 我不知道忘记了记录

    我忘记了记录 我忘记了记录 我忘记了记录

  • Python Flask学习知识点(一)

    在此记录Python Flask学习过程中的知识点,易忘记点,中间也会记录一些小的Python技巧及知识。本文章根...

  • 安卓的自动下载更新和安装

    之前做过有关安卓部分的下载和自动安装打开,忘记记录了,现在补上 代码如下:

网友评论

      本文标题:易忘记代码记录

      本文链接:https://www.haomeiwen.com/subject/jqfybttx.html