杂记-讲述在项目中遇到问题的总结

 

讲述在工作中遇到的部分问题,比较杂,主要是算笔记类型吧

 高手勿喷

在Controller

GetInstance这个方法在单例模式用的甚多,为了避免对内存造成浪费,直到需要实例化该类的时候才将其实例化,所以用getInstance来获取该对象,

 * 至于其他时候,也就是为了简便而已,为了不让程序在实例化对象的时候,不用每次都用new关键字,索性提供一个instance方法,不必一执行这个类就
 * 初始化,这样做到不浪费系统资源!
 * 

 * 单例模式 可以防止 数据的冲突,节省内存空间

 public ActionResult GetNewEmailBoxCount(int? typeid)
        {
            if (!typeid.HasValue)
            {
                return Content("0");
            }
            int allNewCount = 0;
            DateTime endTime = DateTime.Now;
            DateTime begTime = default(DateTime);
            try
            {
                //FileManager fileManager = new FileManager();
                //var lastLogDate = fileManager.ReadEmailWarningMsg(CurrentUser.Id);
                //if (!string.IsNullOrEmpty(lastLogDate))
                //{
                //    begTime = DateTime.Parse(lastLogDate);
                //}
                allNewCount = NotificationExBll.GetInstance().GetNewEmailBoxCount(CurrentUser.Id.ToString(), typeid.Value, default(DateTime), endTime);
               // fileManager.WriteEmailWarningMsg(CurrentUser.Id, endTime.ToString("yyyy-MM-dd HH:mm:ss"));
            }
            catch { }
            return Content(allNewCount.ToString());
        }





2.partialView

 通常,我们创建了Controller后,会点右键,添加一个View。VS会默认在Views文件夹里建立对应的view文件,这个例子里本应该 是“Test/Message.cshtml”。但对于partialView,我们不这样做。因为它是一个可重用的View,所以应该放到Shared 文件夹下。MVC是“约定先行”的编程,所以默认会去找Shared文件夹下的View以及当前页面所在Controller下的View。

 但对于partialView,我们不这样做。因为它是一个可重用的View,所以应该放到Shared 文件夹下。MVC是“约定先行”的编程,所以默认会去找Shared文件夹下的View以及当前页面所在Controller下的View。

所以我们得在Shared文件夹上点右键,添加一个View,并且选择“Create as a Partial View”,这样就不会添加layout等代码,是个完全空白的view。

 也可以在视图中这样写 

<h3>Call Html.Partial</h3>
@Html.Partial("Message" ,new  List<string > {"ccc"  ,"ddd"  , "eee" })
具体看下面这个网址

 http://www.cnblogs.com/yeagen/archive/2012/09/24/2700828.html



3.Lumdba表达式在linq中的使用

 BLL.Where(o=>).FirstOrDefault  和ToList Count()   ToArray()


 AnnouncedUserInfo = _userBll.Where(o => item.AnnouncedUser == o.Id).FirstOrDefault()

 var entity = _nUserBll.Where(o => (o.UserID == CurrentUser.Id && !o.IsGroup) || (o.UserID == groupid && o.IsGroup));
 
 _groupBll.Where(t => t.IsCompletion && !t.IsRemove).Select(t => t.Id).ToList()

 replyCount = _nUserBll.Where(o => o.NotificationID == item.o1.ID && o.IsBack).Count();

4.Controller  返回值  return PartialView(); 或者Content view

return PartialView("~/Views/NotificationType/NotificationList.cshtml", data)


  public ActionResult GetNewEmailBoxCount2(int? typeid)
        {
            if (!typeid.HasValue)
            {
                return Content("0");
            }
            int allNewCount = 0;
            DateTime endTime = DateTime.Now;
            DateTime begTime = default(DateTime);
            try
            {
                FileManager fileManager = new FileManager();
                var lastLogDate = fileManager.ReadEmailWarningMsg(CurrentUser.Id);
                if (!string.IsNullOrEmpty(lastLogDate))
                {
                    begTime = DateTime.Parse(lastLogDate);
                }
                allNewCount = NotificationExBll.GetInstance().GetNewEmailBoxCount2(CurrentUser.Id.ToString(), typeid.Value, begTime, endTime);
                fileManager.WriteEmailWarningMsg(CurrentUser.Id, endTime.ToString("yyyy-MM-dd HH:mm:ss"));
            }
            catch { }
            return Content(allNewCount.ToString());
        }

5.在List<T>中,Contains, Exists, Any都可以实现判断元素是否存在。

先上结果。性能方面:Contains 优于 Exists 优于 Any
http://blog.csdn.net/chen46311973/article/details/50057505


6.userList = userList.OrderBy(t => t.FirstGroup.OrderNumber).ThenBy(t => t.OrderNumber).ThenBy(t => t.CreateTime).ToList();
NET中OrderBy和ThenBy的语义是不同的,如:list.OrderBy(x=>x.A).OrderBy(x=>x.B),那么
最终只会根据B进行排序
list.OrderBy(x=>x.A).ThenBy(x=>x.B),那么最终会先根据A、再
根据B进行排序,类似sql中的order by 语句。
http://www.cnblogs.com/happyframework/p/4153042.html

---------------------------------视图----------------------------------------------------------------------------------
asp.net MVC ViewData详解
 1.将一个字符串传值到视图中
http://www.cnblogs.com/gaopin/archive/2012/11/13/2767515.html
1.
在视图中我们可以用下面代码将字符串显示出来
        <h1>@ViewData["str1"]</h1>
        <h1>@ViewBag.str2</h1>


2.
在视图中我们通过下面语句将str1的值显示出来
       @foreach (var a in ViewData["str"] as List<string>)
         {
           @a
         }
3.
 注意:在顶部要先加上:@using System.Data;
            <ul>
            @foreach(DataRow dr in (ViewData["dt"] as DataTable).Rows)
               {
                 <li>
                 @dr["商品编号"],@dr["客户编号"],
                 </li>
                }
              </ul>


今天再给自己总结一下,关于ViewBag赋值Html格式值,但是在web页显示不正常 下面的就可以解决
4.<div>@Html.Raw(ViewBag.Content)</div>
 @Html.Raw(ViewBag.PageStr)

5.   <td><a href="javascript:;" name="linkDelete" rel="@item.NotificationInfo.ID">删除</a></td>
指定规范链接
具体参考http://blog.sina.com.cn/s/blog_161005e400102w5lz.html


5.HtmlHelper用于生成有数据绑定的Html标签
•专门用于MVC的链接方式:Html.Action(“Home”,“Index”),会根据路由规则生成a标记,并且在运行时可以进行有效性检查,不需要用户点击链接后才知道链接出错了
•将View页面做成强类型页面
•使用Html.**For(model=>model.Property)的格式调用,参数为一个lambda表达式,可以根据对象的属性快速生成表单控件
http://www.cnblogs.com/webenh/p/5790325.html


---------------------------------前端知识---------------------------------------------------------------------------------------------------------


这里的href="javascript:;",其中javascript:是伪协议,它可以让我们通过一个链接来调用
javascript函数.而采用这个方式 javascript:;可以实现A标签的点击事件运行时,如果页面
内容很多,有滚动条时,页面不会乱跳,用户体验更好。




jQuery 取值、赋值的基本方法整理
http://www.jquerycn.cn/a_6730

具体看一段代码

//绑定批量删除、全部、未读、已读点击事件2017.9.6
$(document).off("click", "#spanMailbox>*").on("click", "#spanMailbox>*", function () {//移除以后重写添加
    var cur = $(this);

    if (cur.attr("type") == "checkbox") {
        checkAll(this);
    } else {
        if (cur.attr("class") == "btn") {
            deleteDatas(cur.prev().attr("name"));
        } else {
            var rel = cur.attr("rel");
            if (undefined == rel) return;
            getIsView(rel);
        }
    }
});

针对这段代码 

 1、 off() 和on() ( off() 可以代替unbind(),undelegate(),die(),on()现bind()和delegate()都是由on()实现) 

 off     $("p").off("click");  移除绑定,和unblind

2.$(this);  这个对象

3. attr()

attr() 方法设置或返回被选元素的属性值。根据该方法不同的参数,其工作方式也有所差异。

4.val()函数用于设置或返回当前jQuery对象所匹配的DOM元素的value值


http://www.365mini.com/page/jquery-is.htm


//全选
$(document).off("ifChanged", "#spanMailbox :checkbox").on("ifChanged", "#spanMailbox :checkbox", function () {
    if ($(this).IsChecked()) { //$(":checkbox") 是隐藏
        $("#listContent").find(":checkbox").iCheck("check");
    }
    else {
        $("#listContent").find(":checkbox").iCheck("uncheck");
    }
});
$('input').iCheck('check');   //将输入框的状态设置为checked 

//$(":checkbox") 隐藏所有 type="checkbox" 的 <input> 元素

iCheck表单美化插件使用方法详解(含参数、事件等)

siblings() 筛选 $(this).siblings().hide();

 cur.addClass("active").siblings().removeClass("active");

显示ID为tab (传递过来的TAB变量 )的标签,并隐藏与其平级的其它标签
一般用作树形菜单导航 点开一个 隐藏其它的


$.ajax post/get请求

$.ajaxOpinionData({
        url: "Notification/MailContentUC",   必需。规定把请求发送到哪个 URL。 
        data: { notificationId: mailId },   可选。映射或字符串值。规定连同请求发送到服务器的数据。 html拼接的,json数组,form表单经serialize()序列化的;通过dataType指定,不指定智能判断。   
        type: 'post',
        dataType: 'html',可选。规定预期的服务器响应的数据类型。 默认执行智能判断(xml、json、script 或 html) 
        success: function (data) {
            $("#mailContent").html(data);
            $("#mailContent").show();
            $("#goBackToMailList").show();
            $("#listContent").hide();
            $(".nano").nanoScroller();
            ResizeDivHeight();
        }

树形结构

jq生成目录文件树jQuery Ztree基本用法

b)zTreeObj.getNodes()获取zTree的全部节点数据,返回值Array(JSON)
vartreeObj = $.fn.zTree.getZTreeObj("tree");
var nodes = treeObj.getNodes();

//获取勾选的用户相关id 树形结构
function getTreeValue(treeName, isPhone, IsGroup, isGetAllNodes) {
    var checkedArray = [];
    var zTree = $.fn.zTree.getZTreeObj(treeName);
    var nodes = zTree.getCheckedNodes(true);
    if (isGetAllNodes) {
        var nodes2 = zTree.getCheckedNodes(false);
        $.merge(nodes, nodes2);
    }
    if (nodes.length <= 0) {
        return [];
    }
    var isStat = false;
    if (treeName == "treeDemoStat") {
        isStat = true;
    }
    $.each(nodes, function (i, val) {
        if (!IsGroup) {
            if (!val.isgroup) {
                if (!isPhone) {
                    checkedArray.push(val.id);
                }
                else {
                    checkedArray.push(val.phone);
                }
            }
        }
        else {
            if (!isPhone) {
                if (isStat) {
                    if (val.isstat == "1") {
                        checkedArray.push(val.id);
                    }
                }
                else {
                    if (!val.iscatalog && val.isgroup) {
                        checkedArray.push(val.id);
                    }
                }
            }
            else {
                checkedArray.push(val.phone);
            }
        }
    });
    return checkedArray;
}

//获取勾选对象的对应父节点和本身的id
function getParentIdAndId(treeName, isrPid) {
    var checkedArray = [];
    var zTree = $.fn.zTree.getZTreeObj(treeName);
    var nodes = zTree.getCheckedNodes(true);
    if (nodes.length <= 0) {
        return [];
    }
    $.each(nodes, function (i, val) {
        if (!val.isgroup) {
            var parentId = isrPid ? val.rPId : val.pId;
            checkedArray.push(parentId + "|" + val.id);
        }
    });
    return checkedArray;
}

encodeURIComponent() 函数可把字符串作为 URI 组件进行编码

/ js/判断是否ie浏览器 
function isIE() {
    var Sys = {};
    var ua = navigator.userAgent.toLowerCase();
    var s;
    (s = ua.match(/rv:([\d.]+)\) like gecko/)) ? Sys.ie = s[1] :
    (s = ua.match(/msie ([\d.]+)/)) ? Sys.ie = s[1] :
    (s = ua.match(/firefox\/([\d.]+)/)) ? Sys.firefox = s[1] :
    (s = ua.match(/chrome\/([\d.]+)/)) ? Sys.chrome = s[1] :
    (s = ua.match(/opera.([\d.]+)/)) ? Sys.opera = s[1] :
    (s = ua.match(/version\/([\d.]+).*safari/)) ? Sys.safari = s[1] : 0;
    if (Sys.ie) return true; else return false;
}


function arrayToObject(arr) {
    var obj = {};
    for (var i in arr) {
        obj[i] = arr[i];
        if (i >= arr.length - 1) break;//防止方法转换
    }
    return obj;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值