文章的目的为了记录.net mvc学习的经历。本职为嵌入式软件开发,公司安排开发文件系统,临时进行学习开发,系统上线3年未出没有大问题。开发流程和要点有些记忆模糊,赶紧记录,防止忘记。
相关链接:
开源 C# .net mvc 开发(一)WEB搭建_c#部署web程序-CSDN博客
开源 C# .net mvc 开发(二)网站快速搭建_c#网站开发-CSDN博客
开源 C# .net mvc 开发(三)WEB内外网访问-CSDN博客
开源 C# .net mvc 开发(四)工程结构、页面提交以及显示-CSDN博客
开源 C# .net mvc 开发(五)常用代码快速开发_c# mvc开发-CSDN博客
开源 C# .net mvc 开发(六)发送邮件、定时以及CMD编程-CSDN博客
开源 C# .net mvc 开发(七)动态图片、动态表格和json数据生成-CSDN博客
开源 C# .net mvc 开发(八)IIS Express轻量化Web服务器的配置和使用-CSDN博客
推荐链接:
开源 java android app 开发(一)开发环境的搭建-CSDN博客
开源 java android app 开发(二)工程文件结构-CSDN博客
开源 java android app 开发(三)GUI界面布局和常用组件-CSDN博客
开源 java android app 开发(四)GUI界面重要组件-CSDN博客
开源 java android app 开发(五)文件和数据库存储-CSDN博客
开源 java android app 开发(六)多媒体使用-CSDN博客
开源 java android app 开发(七)通讯之Tcp和Http-CSDN博客
开源 java android app 开发(八)通讯之Mqtt和Ble-CSDN博客
开源 java android app 开发(九)后台之线程和服务-CSDN博客
开源 java android app 开发(十)广播机制-CSDN博客
开源 java android app 开发(十一)调试、发布-CSDN博客
开源 java android app 开发(十二)封库.aar-CSDN博客
开源 java android app 开发(十三)绘图定义控件、摇杆控件的制作-CSDN博客
在前面4个章节里,完成了浏览器静态页面的显示、网站数据库的增删改查、最终内外网访问的办法,工程结构以及页面的提交和显示。
本章主要介绍常用代码,来开发速度,减少大家查找的时间。具体内容如下:
1.文件的上传和下载。
2.excel的生成下载。
3.ling查询的常用代码。
4.logo日志的使用。
5.Ajax异步访问。
一、对于网站或者ERP来说,我们经常会用到文件上传和下载。
1)以下为文件上传的代码
.cshtml前端代码
<text>选择上传文件:</text>
<input name="file" type="file" id="file" />
<br /><br />
<input type="submit" name="Upload" value="上传" class="btn-primary" />
对应的.cs控制器代码
public ActionResult File_Debug_Up(MD_File mD_File, FormCollection form)
{
if (file.ContentLength == 0)
{
Session["Err"] = "烧录文件未选择或大小为0,请重新选择!";
return RedirectToAction("FileNameErrPage", "Home");
}
else
{
//文件大小不为0
file = Request.Files[0];
//保存成自己的文件全路径,newfile就是你上传后保存的文件,
//服务器上的UpLoadFile文件夹必须有读写权限
string target = Server.MapPath("~") + ("/MD_File/");//取得目标文 件夹的路径
string filename = file.FileName;//取得文件名字
filename.Replace(" ", "");
string[] ExtArray = filename.Split('.');
strExt = "." + ExtArray[ExtArray.Length - 1];
string pathdel = target + "/" + mD_File.FileName;
file.SaveAs(path + strExt);
}
}
2)以下为文件下载的代码
前端.cshtml代码
@Html.ActionLink("下载", "Download", new { id = item.Id })
后台.cs代码
public FileResult Download(int? id)
{
if (Convert.ToString(Session["Right"]) == "销售助理" ||
Convert.ToString(Session["Right"]) == "烧录厂"
)
{
return null;
}
if (Convert.ToString(Session["User"]) != "OK")//(test != null && password == test.Password)
{
return null;
}
else
{
MD_File mD_File = db.MD_File.Find(id);
string str1 = mD_File.PrjCode;
str1 += "_" + mD_File.Chip;
str1 += "_" + mD_File.Mode;
str1 += "_" + mD_File.Version;
str1 += mD_File.Remark + ".zip";
str1 = str1.Replace(" ", "");
string filePath = Server.MapPath("~/MD_File/" + str1);//路径
return File(filePath, "application/zip", str1); //welcome.txt是客户端保存的名字
}
}
二、在系统中经常需要生成excel文件来进行统计。
使用Nuget 安装NPOI
引入命名空间
using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;
前端.cshtml代码
@Html.ActionLink("出货汇总表(未处理)", "ExportExcel", new { id = 0 })
后端控制器代码
public FileResult ExportExcel(int? id)//出货汇总xls下载
{
var sbHtml = new StringBuilder();
sbHtml.Append("<table border='1' cellspacing='0' cellpadding='0'>");
sbHtml.Append("<tr>");
var lstTitle = new List<string> { "月份", "下烧录单日期", "产品型号", "订单数量",
"封装形式", "要求交期", "程序", "CKS(PROM)/CRC(DROM)", "滚动起始码", "滚", "码", "起始", "值", "客户名称"};
foreach (var item in lstTitle)
{
sbHtml.AppendFormat("<td style='font-size: 18px;text-align:center;background-color: #DCE0E2; font-weight:bold;' height='40'>{0}</td>", item);
}
sbHtml.Append("</tr>");
string strTmp = "未读";
if (id == 1)
{
strTmp = "已读";
}
var FRecord = from d in db.Flash_Record where d.State == strTmp select d;
foreach(var item in FRecord)
{
sbHtml.Append("<tr>");
sbHtml.AppendFormat("<td style='font-size: 18px;height:40px;'>{0}</td>", "");
strTmp = Convert.ToString(item.UpDate).Replace(" ", "");
sbHtml.AppendFormat("<td style='font-size: 18px;height:40px;'>{0}</td>", strTmp);
strTmp = Convert.ToString(item.Chip).Replace(" ", "");
sbHtml.AppendFormat("<td style='font-size: 18px;height:40px;'>{0}</td>", strTmp);
strTmp = Convert.ToString(item.ChipNum).Replace(" ", "");
sbHtml.AppendFormat("<td style='font-size: 18px;height:40px;'>{0}</td>", strTmp);
strTmp = Convert.ToString(item.Package).Replace(" ", "");
sbHtml.AppendFormat("<td style='font-size: 18px;height:40px;'>{0}</td>", strTmp);
strTmp = Convert.ToString(item.FinishDate).Replace(" ", "");
sbHtml.AppendFormat("<td style='font-size: 18px;height:40px;'>{0}</td>", strTmp);
strTmp = Convert.ToString(item.Soft).Replace(" ", "");
sbHtml.AppendFormat("<td style='font-size: 18px;height:40px;'>{0}</td>", strTmp);
strTmp = Convert.ToString(item.CKS).Replace(" ", "") + "/"+ Convert.ToString(item.CRC).Replace(" ", "");
sbHtml.AppendFormat("<td style='font-size: 18px;height:40px;'>{0}</td>", strTmp);
strTmp = Convert.ToString(item.RollStart).Replace(" ", "") ;
int iwTmp = Convert.ToInt32(strTmp, 16);
string strDec = Convert.ToString(iwTmp);
string str4, str3, str2, str1;
str4 = strTmp.Substring(0, 2);
str3 = strTmp.Substring(2, 2);
str2 = strTmp.Substring(4, 2);
str1 = strTmp.Substring(6, 2);
strTmp = str4 + " " + str3 + " " + str2 + " " + str1;
str4 = Convert.ToString(Convert.ToInt32(str4, 16));
str3 = Convert.ToString(Convert.ToInt32(str3, 16));
str2 = Convert.ToString(Convert.ToInt32(str2, 16));
str1 = Convert.ToString(Convert.ToInt32(str1, 16));
string strTmpRollStartEn = Convert.ToString(item.RoolStartEn).Replace(" ", "");
if (strTmpRollStartEn != "使能")
{
strTmp = "";
str4 = "";
str3 = "";
str2 = "";
str1 = "";
}
sbHtml.AppendFormat("<td style='font-size: 18px;height:40px;'>{0}</td>", strTmp);
sbHtml.AppendFormat("<td style='font-size: 18px;height:40px;'>{0}</td>", str4);
sbHtml.AppendFormat("<td style='font-size: 18px;height:40px;'>{0}</td>", str3);
sbHtml.AppendFormat("<td style='font-size: 18px;height:40px;'>{0}</td>", str2);
sbHtml.AppendFormat("<td style='font-size: 18px;height:40px;'>{0}</td>", str1);
strTmp = Convert.ToString(item.Customer).Replace(" ", "");
sbHtml.AppendFormat("<td style='font-size: 18px;height:40px;'>{0}</td>", strTmp);
sbHtml.Append("</tr>");
}
sbHtml.Append("</table>");
//第一种:使用FileContentResult
byte[] fileContents = Encoding.Default.GetBytes(sbHtml.ToString());
string strExcelName = "出货汇总表(未处理).xls";
if (id == 1)
{
strExcelName = "出货汇总表(已处理).xls";
}
return File(fileContents, "application/ms-excel", strExcelName);
/*
//第二种:使用FileStreamResult
var fileStream = new MemoryStream(fileContents);
return File(fileStream, "application/ms-excel", "fileStream.xls");
//第三种:使用FilePathResult
//服务器上首先必须要有这个Excel文件,然会通过Server.MapPath获取路径返回.
var fileName = Server.MapPath("~/Files/fileName.xls");
return File(fileName, "application/ms-excel", "fileName.xls");
*/
}
三、sql server数据控制使用ling查询语句,下面为常用代码
1、多条件查询:
并且 &&
或者 ||
var list = con.car.Where(r => r.code == "c014" || r.oil == 8.2m);
2、模糊查询
1.模糊
var list = con.car.Where(r => r.name.Contains("AT"));//contains包含
2.开头
var list = con.car.Where(r => r.name.StartsWith("皇冠"));//startswith以什么开头
3.结尾
var list = con.car.Where(r => r.name.EndsWith("版"));//endswith以什么结尾
3、统计查询
1.总个数
//var count = con.car.Count();
2.最大值
//var Max = con.car.Max(r => r.price);
3.最小值
//var Min = con.car.Min(r => r.price);
4.平均值
//var avg = con.car.Average(r => r.price);
4、分页查询
跳过,获取
int count = 5;//一页显示多少条
int pagecount = 1;//第几页
var list = con.car.Skip(pagecount * count).Take(count);//skip:跳过多少条。take:取多少条
5、排序查询
升序
//var list = con.car.OrderBy(r => r.price);
降序
//var list = con.car.OrderByDescending(r => r.price);
去重:
var aaa = con.car.Select(r => r.oil).Distinct();
6、外键显示
return this.brand1.brand_name;//brand1是外键表名,与主键表列重名,自动加一
7、组合查询
var list1 = con.car.AsQueryable();
var list2 = con.car.AsQueryable();
var list3 = con.car.AsQueryable();
if (TextBox1.Text.Trim().Length > 0)
{
list1 = list1.Where(r => r.name.Contains(TextBox1.Text.Trim()));
}
if (TextBox2.Text.Trim().Length > 0)
{
list2 = list2.Where(r => r.brand1.brand_name.Contains(TextBox2.Text.Trim()));
}
if (TextBox3.Text.Trim().Length > 0)
{
list3 = list3.Where(r => r.oil == Convert.ToDecimal(TextBox3.Text.Trim()));
}
var list = list1.Intersect(list2).Intersect(list3);
交集
var list = list1.Intersect(list2).Intersect(list3);
四、系统中经常需要登录操作等日志功能,以下为logo的代码
使用Nuget添加Log4net库
对Web.config配置
使用命名空间
using log4net;
using log4net.Config;
在Global.asax文件中初始化logo
在需要使用的地方记录日志
logger.Info(strLoginName+"登录成功");
五、Ajax:在前面所讲的网站的数据读写中必须整个网页提交或处理,但实际经常需要只读取部分的情况,该情况就是用Ajax异步处理。以下例子进行了数据提交和回读,不进行整个页面的处理。
.cshtml前端代码
<script>
function getCustomPara(strCustom) {
//alert(1);
//var varValue = $("#CustomName").combobox("getValue");
//alert("onselect:" + varValue);
//alert(strCustom);
$.ajax({
url: "/PrjProcesses/GetCustomPara?str=" + strCustom,
type: "get",
data: {},
success: function (res) {
//alert(res);
var strTmp = res.split(';');
document.getElementById("FacCode").value = strTmp[0];
document.getElementById("PrjNo").value = strTmp[1];
}, dataType: "text"
});
}
</script>
对应的PrjProcesses.cs控制器代码
public string GetCustomPara(string str)
{
var var_search = db.Custom.Where(r => r.Name.Contains(str)).First();
str = var_search.FacCode.Replace(" ", "");
str += ";" + "MX_"+ var_search.C_Abbr.Replace(" ", "");
str += DateTime.Now.ToString("yyMM"); ;
string strNum1 = (Convert.ToInt32(Session["PrjCum"])).ToString("D3");
str += strNum1;
return str;
}