.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".txt""/>
<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.chreactor.com")
)
)
)
);
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.chreactor.com</網址>
</商品詳情>
</商品列表>
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.chreactor.com