讲述在工作中遇到的部分问题,比较杂,主要是算笔记类型吧
高手勿喷
在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());
}
但对于partialView,我们不这样做。因为它是一个可重用的View,所以应该放到Shared 文件夹下。MVC是“约定先行”的编程,所以默认会去找Shared文件夹下的View以及当前页面所在Controller下的View。
所以我们得在Shared文件夹上点右键,添加一个View,并且选择“Create as a Partial View”,这样就不会添加layout等代码,是个完全空白的view。
也可以在视图中这样写
,new
List > {"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
先上结果。性能方面: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.
在视图中我们可以用下面代码将字符串显示出来
@ViewData["str1"]
@ViewBag.str2
2.
在视图中我们通过下面语句将str1的值显示出来
@foreach (var a in ViewData["str"] as List
{
@a
}
3.
注意:在顶部要先加上:@using System.Data;
@foreach(DataRow dr in (ViewData["dt"] as DataTable).Rows)
{
@dr["商品编号"],@dr["客户编号"],
}
5.
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" 的 元素
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;
}
/ 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;
}