.NET MVC学习笔记二

1、.NET MVC页面加入缓存

1.1 方法一:输出缓存

在控制器代码前加上注解:[OutputCache(Duration=15)]。这里的15单位是秒。

例如:

[OutputCache(Duration=15)]

public ActionResult Index()

{

 return View();

}

1.2 方法二:使用缓存配置文件

(1)在web.config文件<system.web>中加入以下配置:

<caching>

<outputCacheSettings>

<outputCacheProfiles>

<addname="testcache"duration="10"enabled="true"location="ServerAndClient"varyByParam="none"/>

</outputCacheProfiles>

</outputCacheSettings>

</caching>

(2)在要使用的action中加入要引用的缓存配置

[OutputCache(CacheProfile="testcache")]

public ActionResult Index()

{

return View();

}

 

2、读取excel内容

2.1 引入DLL

using System.Data.OleDb;

using System.Data;

2.2 方法一:将excel看作数据源来进行读取

string oleconn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\\Test\\test.xls;Extended Properties='Excel 8.0;HDR=NO'";

// HDR=NO 无字段。

// HDR=YES 有字段,一般默认excel表中第1行的列标题为字段名。

OleDbConnection conn = newOleDbConnection(oleconn);

conn.Open();

string str_sql = "select * from [Sheet1$]";

OleDbDataAdapter oda = newOleDbDataAdapter(str_sql, conn);

DataSet ds = newDataSet();

oda.Fill(ds);

conn.Close();

2.2 方法二:使用datareader

string oleconn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\\Test\\test.xls;Extended Properties='Excel 8.0;HDR=NO'";

string str_sql = "select * from [Sheet1$]";

OleDbConnection conn = newOleDbConnection(oleconn);

OleDbCommand od= newOleDbCommand();

od.Connection = conn;

od.CommandText = str_sql;

conn.Open();

OleDbDataReader reader= od.ExecuteReader();

while(reader.Read())

{

要读取的字段;

 }

reader.Close();

conn.Close();

 

3、将数据导出为txt文件

FileStream fs = newFileStream("D:\\Test\\文件名.txt", FileMode.Create);

byte[] data = System.Text.Encoding.Default.GetBytes(要写入的数据);

//开始写入

fs.Write(data, 0, data.Length);

//清空缓冲区、关闭流

fs.Flush();

fs.Close();

 

4、分隔字符串

例如:字符串string test=“aabccbdde”;

想以b作为分隔

string[] sArray = Regex.Split(test, "b", RegexOptions.IgnoreCase);

 

5、截取字符串

例如: string test=”(123456)”;

想把左右两个括号去掉,只保留数字。

//截取左括号

stringtestSubL = test.Substring(1);

//截取右括号

string testSubR = testSubL.Substring(0,testSubL.Length-1);

 

6、log4net 记录MVC监控日志

6.1 下载log4net

地址:http://logging.apache.org/log4net/download_log4net.cgi

6.2 引用log4net.dll

将下载下来的程序,自行按照所需要的.net版本编译,编译完成,在项目中引用log4net.dll文件。

6.3 配置log4net

(1)在AssemblyInfo.cs最下面加入一行。

[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]

(2)在根目录下新建一个log4net.config文件。

<?xmlversion="1.0"encoding="utf-8" ?>

<configuration>

<configSections>

<sectionname="log4net"type="System.Configuration.IgnoreHandlerSection"/>

</configSections>

<log4net>

<appendername="console"type="log4net.Appender.ConsoleAppender"></appender>

<root>

<levelvalue="WARN" />

<appender-refref="LogFileAppender" />

</root>

<loggername="Test">

<levelvalue="DEBUG"/>

</logger>

<appendername="LogFileAppender"type="log4net.Appender.FileAppender">

<paramname="File"value="D:/Test/log.txt" />

<paramname="AppendToFile"value="true" />

<layouttype="log4net.Layout.PatternLayout">

<paramname="Header"value="[Header]/r/n"/>

<paramname="Footer"value="[Footer]/r/n"/>

<paramname="ConversionPattern"value="%d [%t] %-5p %c [%x]  - %m%n"/>

</layout>

</appender>

</log4net>

</configuration>

6.4 使用日志

og4net.ILog log = log4net.LogManager.GetLogger("Test"); 

log.Error("haha"); 

log.Info("log日志信息");

log.Debug("debug信息");

log.Error("error信息");

log.Warn("warn信息");

Exception ex = newException("测试的异常信息");

log.Fatal("fatal信息", ex);

 

7、Log4Net 日志文件按日期来命名

结合6,将log4net.config更改为如下内容

<?xmlversion="1.0"encoding="utf-8" ?>

<configuration>

<configSections>

<sectionname="log4net"type="System.Configuration.IgnoreHandlerSection"/>

</configSections>

<log4net>

<appendername="console"type="log4net.Appender.ConsoleAppender"></appender>

<root>

<levelvalue="WARN" />

<appender-refref="RollingLogFile" />

</root>

<loggername="Test">

<levelvalue="DEBUG"/>

</logger>

<appendername="RollingLogFile"type="log4net.Appender.RollingFileAppender">

<paramname="File"value="D:/Test/"/>

<paramname="AppendToFile"value="true"/>

<paramname="RollingStyle"value="Composite"/>

<paramname="DatePattern"value="yyyy-MM-dd&quot;.txt&quot;"/>

<paramname="PreserveLogFileNameExtension"value="true"/>

<paramname="StaticLogFileName"value="false"/>

<!--指定每个文件的最大值,超出容量就拆分-->

<maxSizeRollBackupsvalue="10" />

<paramname="MaximumFileSize"value="10KB"/>

<layouttype="log4net.Layout.PatternLayout">

<paramname="ConversionPattern"value="%date %-5level %logger  message:%m%n"/>

</layout>

</appender>

</log4net>

</configuration>

 

8、Compare不明确的引用,问题解决

例如,如下model

[DataType(DataType.Password)]

[Display(Name = "确认密码")]

[Compare("NewPassword", ErrorMessage = "两次密码输入不一致。")]

publicstring ConfirmPassword { get; set; }

会报错误:

错误 9   “CompareAttribute”是“System.ComponentModel.DataAnnotations.CompareAttribute”和“System.Web.Mvc.CompareAttribute”之间的不明确的引用

解决方法

[System.ComponentModel.DataAnnotations.Compare("Password", ErrorMessage = "两次密码输入不一致。")]

public string ConfirmPassword { get; set; }

 

9、“发现同一依赖程序集的不同版本间存在无法解决的冲突。当日志详细信息设置为“详细”时,这些引用冲突将会在生成日志中列出。”解决方法

9.1 VS2013,选择“工具”选项

9.2在左侧树中,选择 项目和解决方案 节点,然后选择 生成和运行 

9.3在出现的工具/选项页中,设置 MSBuild项目生成输出的详细程度 水平 详细

 

10、分页算法

以操作mySql为例:

select * from 数据表limit(页码-1)*每页记录数,每页记录数

例:select * from 数据表limit 0,2;

 

11、格式良好的XML

11.1 每个开始标签必须有一个结束标签。

11.2 空元素必须以“/>”结束。

11.3 元素不能够交错但可以嵌套。

11.4 元素和特性必须使用一致的大小写。

11.5 一个元素不能够有两个特性同名。

11.6 一个元素可以包含两个同名的嵌套元素。

11.7 一个文档只可以有一个根元素。

11.8 所有特性在值的前后都要有引号。

11.9 注释不能放到标签中。

 

12、写入XML文件方法一

12.1 代码

using System.Xml;

String xmlFilePath = Server.MapPath("XMLTest.txt");

XmlTextWriter writer = new XmlTextWriter(xmlFilePath,Encoding.UTF8);

writer.Formatting = Formatting.Indented;

writer.Indentation = 3;

writer.WriteStartDocument();

 //加入创建时间

writer.WriteComment("Created@ by jjyc.org "+DateTime.Now.ToString());

writer.WriteStartElement("父元素");

writer.WriteStartElement("子元素");

writer.WriteAttributeString("特性1","特性1的值");

writer.WriteAttributeString("特性2","特性2的值");

//关闭特性1

writer.WriteEndElement();

//关闭子元素

writer.WriteEndElement();

writer.Close();

12.2 结果如下

<?xml version="1.0" encoding="utf-8"?>

<!--Created@ by jjyc.org 2016/1/26 9:46:41-->

<父元素>

   <子元素 特性1="特性1的值" 特性2="特性2的值">

      <标题>特性1下的标题</标题>

      <详情>特性1下的详情</详情>

   </子元素>

</父元素>

 

13、读取XML文件方法一

13.1 代码

结合上文生成的XMLTest.txt

String xmlFile = Server.MapPath("XMLTest.txt");

XmlTextReader reader = new XmlTextReader(xmlFile);

StringBuilder str = new StringBuilder();

while (reader.Read())

{

     switch (reader.NodeType)

     {

          case XmlNodeType.XmlDeclaration:

          str.Append("XML Declaration: <b>");

          str.Append(reader.Name);

          str.Append(" ");

          str.Append("</b><br/>");

          break;

          case XmlNodeType.Element:

          str.Append("Element :<b>");

          str.Append(reader.Name);

          str.Append("</b><br/>");

          break;

          case XmlNodeType.Text:

          str.Append("- Value:<b>");

          str.Append(reader.Value);

          str.Append("</b><br/>");

          break;

    }

    if (reader.AttributeCount > 0)

    {

          while (reader.MoveToNextAttribute())

          {

                str.Append("-Attribute:<b>");

                str.Append(reader.Name);

                str.Append("</b> Value:<b>");

                str.Append(reader.Value);

                str.Append("</b><br/>");

            }

      }             

}

reader.Close();

 

13.2结果如下(已经转为HTML格式显示)

XML Declaration: xml 
-Attribute:version Value:1.0
-Attribute:encoding Value:utf-8
Element :父元素
Element :子元素
-Attribute:特性1 Value:特性1的值
-Attribute:特性2 Value:特性2的值
Element :标题
- Value:特性1下的标题
Element :详情
- Value:特性1下的详情

 

14、 写入XML文件方法二

14.1 代码

XDocument doc = new XDocument(

                new XDeclaration("1.0", "uft-8", "yes"),

                new XComment("Created:" + DateTime.Now.ToString()),

                new XElement("根节点",

                    new XElement("商品列表",

                    new XAttribute("商品ID", "A0001"),

                    new XAttribute("商品种类", "食品"),

                    new XElement("商品名称", "儿童车"),

                    new XElement("商品价格", "200.3"),

                    new XElement("商品详情",

                        new XElement("信息来源", "佳佳原创"),

                        new XElement("网址", "http://www.jjyc.org")

                        )

                    )

                    )

                );

            doc.Save(Server.MapPath("NewXMLTest.txt"));

14.2 生成的XML如下

<?xml version="1.0" encoding="utf-8" standalone="yes"?>

<!--Created:2016/1/27 11:55:08-->

<商品列表 商品ID="A0001" 商品种类="食品">

  <商品名称>儿童车</商品名称>

  <商品价格>200.3</商品价格>

  <商品详情>

    <信息来源>佳佳原创</信息来源>

    <网址>http://www.jjyc.org</网址>

  </商品详情>

</商品列表>

 

15 读取XML文件方法二

15.1 代码

string xmLFile = Server.MapPath("NewXMLTest.txt");

            XDocument doc = XDocument.Load(xmLFile);

            StringBuilder str = new StringBuilder();         

            foreach (XElement element in doc.Element("根节点").Elements())

            {

                str.Append("商品ID:"+(string)element.Attribute("商品ID").Value + "<br />");

                str.Append("商品种类:"+(string)element.Attribute("商品种类").Value + "<br />");

                str.Append("商品名称:" + (string)element.Element("商品名称") + "<br />");

                str.Append("商品价格:" + String.Format("{0:C}",(decimal)element.Element("商品价格")) + "<br />");

                foreach (XElement ele in element.Elements("商品详情"))

                {

                    str.Append("信息来源:" + (string)ele.Element("信息来源") + "<br />");

                    str.Append("网址:" + (string)ele.Element("网址") + "<br />");

                }             

            }

15.2结果如下(已经转为HTML格式显示)

商品ID:A0001
商品种类:食品
商品名称:儿童车
商品价格:¥200.30
信息来源:佳佳原创
网址:http://www.jjyc.org