.NET MVC学习笔记一
1、延遲請求驗證機制:在“web.config”里配置<httpRuntime requestValidationMode=”4.5” />
2、啟用自定義錯誤:在“web.config”里配置
<system.web>
<customErrorsmode="On"defaultRedirect="http://www.chreactor.com">
<errorstatusCode="404"redirect="~/error/notfound"></error>
</customErrors>
</system.web>
3、.NET MVC操作MySQL數據庫
3.1 先去MySQL官網下載mysql-connector-net,將下載好的dll文件引入到工程中。
3.2 在項目中,引入using MySql.Data.MySqlClient;
3.3參考代碼:
MySqlConnection myConnection = null;
MySqlCommand myCommand = null;
MySqlDataReader myDataReader = null;
//連接字符串拼裝
myConnection= newMySqlConnection("Host = localhost;Database = 數據庫;Username = 用戶名;Password =密碼");
//連接
myConnection.Open();
if(myConnection.State.ToString()=="Open")
{
連接MYSQL成功!;
}
//數據庫操作
myCommand= newMySqlCommand("select * from test",myConnection);
myDataReader= mycom.ExecuteReader();
//一次次讀,讀不到就結束
while (myDataReader.Read())
{
讀取字段信息;
}
//////關閉相關對象
myDataReader.Close();
myConnection.Close();
4、web.config配置數據庫連接方法一
4.1 web.config文件:加在<appsettings>和</appsettings> 之間
<appsettings>
<add
key="connstring" value="uid=xx;pwd=xx;database=batabase_name;server=(local)"/></appsettings>
4.2 取連接字符串:
string myvar=configurationsettings.appsettings["connstring"];
5、web.config配置數據庫連接方法二
5.1 web.config文件:加在</configSections>后面
<connectionStrings>
<add name="SqlConnStr" connectionString="user id=xx;password=xx;initial catalog=database_name;data source=.\sqlxxxx"/>
</connectionStrings>
5.2 取連接字符串
string connString = System.Web.Configuration.WebConfigurationManager.ConnectionStrings["SqlConnStr"].ConnectionString;
或
protectedstaticstring connectionString = ConfigurationManager.ConnectionStrings["SqlConnStr"].ConnectionString;
6、一個完整的.net 操作mysql數據
6.1 數據新增
publicclassUserInfoEntity
{
publicstaticstring connectionString = System.Web.Configuration.WebConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString;
publicstring UserName { get; set; }
publicstring UserPassword { get; set; }
publicbool Add()
{
///////////////////獲取MYSQ看數據返回值////////////////////////////
MySqlConnection myconn = null;
MySqlCommand mycom = null;
//連接字符串拼裝
myconn = newMySqlConnection(connectionString);
//連接
myconn.Open();
mycom = newMySqlCommand("insert into testuser (username,userpassword) values(?userName,?userPassword)", myconn);
mycom.Parameters.Add("@userName", MySqlDbType.VarChar, 32).Value = UserName;
mycom.Parameters.Add("@userPassword", MySqlDbType.VarChar, 32).Value = UserPassword;
int rows = mycom.ExecuteNonQuery();
//////關閉相關對象
if (myconn!= null) { myconn.Close(); }
returntrue;
}
6.2 數據查詢
注意:DbConnection是一個靜態的連接類,需要自己寫。或者這塊直接用連接字符串替代。
//連接字符串拼裝
MySqlConnection myconn = new MySqlConnection(DbConnection.connectionString);
MySqlCommand mycom = new MySqlCommand();
mycom.CommandText = "select * from testuser where username=?userName and userpassword=?userPassword";
mycom.Parameters.Add("@userName", MySqlDbType.VarChar, 32).Value = UserName;
mycom.Parameters.Add("@userPassword", MySqlDbType.VarChar, 32).Value = UserPassword;
mycom.Connection = myconn;
myconn.Open();
var rows = mycom.ExecuteScalar();
mycom.Connection.Close();
7、.NET MVC自己編寫登錄驗證(常規版)
7.1 要先引入using System.Web.Security;
7.2 驗證值寫入cookie:
FormsAuthenticationTicket authTicket = newFormsAuthenticationTicket(
1,
"名稱",
DateTime.Now,
DateTime.Now.AddMinutes(30),
false,
"用戶數據"
);
string encryptedTicket = FormsAuthentication.Encrypt(authTicket);
HttpCookie authCookie = newHttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket);
Response.Cookies.Add(authCookie);
如果要記住登錄認證(上文中設置的記住時間是30分鐘):
authTicket中的 false,改為true。
authCookie.Expires = ticket.encryptedTicket;
7.3 認證的cookie值獲取:
if (User.Identity.IsAuthenticated)
{
string cookieName = FormsAuthentication.FormsCookieName;
HttpCookie authCookie = Request.Cookies[cookieName];
FormsAuthenticationTicket authTicket = null;
authTicket = FormsAuthentication.Decrypt(authCookie.Value);
string userinfo = authTicket.UserData;
string userinfoName = authTicket.Name;
}
8、.NET MVC自己編寫登錄驗證(簡潔版)
public ActionResult LoginIn(string username, string password)
{
string userdata = username + "|" + password;
FormsAuthentication.SetAuthCookie(userdata,true);
return RedirectToAction("Index");
}
判斷是否登錄,取cookie里的登錄信息。
public ActionResult Index()
{
if (User.Identity.IsAuthenticated)
{
string userinfo = User.Identity.Name;
}
return View();
}
9、用戶注銷登錄認證信息
FormsAuthentication.SignOut();
10、在MVC中使用注解方式的認證[Authorize(Roles = "admin")]
10.1 將FormsAuthenticationTicket authTicket中用戶數據中填寫:admin。見本章內容 7.2條。
10.2 在Global.asax中添加驗證
///<summary>
///構造方法
///</summary>
public MvcApplication()
{
AuthorizeRequest += newEventHandler(Application_AuthenticateRequest);
}
protectedvoid Application_AuthenticateRequest(Object sender,EventArgs e)
{
HttpCookie authCookie = Context.Request.Cookies[FormsAuthentication.FormsCookieName];
if (authCookie == null || authCookie.Value == "")
{
return;
}
FormsAuthenticationTicket authTicket = null;
try
{
authTicket = FormsAuthentication.Decrypt(authCookie.Value);
}
catch
{
return;
}
string[] roles = authTicket.UserData.Split(newchar[] { ',' });
if (Context.User != null)
{
Context.User = new System.Security.Principal.GenericPrincipal(Context.User.Identity,roles);
}
}
11、.net mvc 引入部分視圖
11.1 Razor 語法:
@Html.Partial
@{Html.RenderPartial();}
@{Html.RenderAction();}
@RenderPage()
11.2 用法:
一般用@{Html.RenderPartial();},如果引入的頁面需要使用model同數據庫交互,就用@{Html.RenderAction();}
12、使用MD5加密
string A; //加密前數據
string B; //加密后數據
B=System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(A,"MD5")
13、利用JSON實現省市菜單聯動
13.1 創建省MODEL
public class Province
{
public int ID { get; set; }
public string Name { get; set; }
}
public class City
{
public int ID { get; set; }
public int ProvinceID { get; set; }
public string Name { get; set; }
public string ZipCode { get; set; }
}
13.2 創建基礎省市數據
public static class ProvincAndCityBaseData
{
public static List<Province> GetProvices()
{
List<Province> result = new List<Province>();
result.Add(new Province(){ ID = 1, Name = "河北省"});
result.Add(new Province(){ ID = 2, Name = "江蘇省"});
result.Add(new Province(){ ID = 3, Name = "上海市" });
return result;
}
public static List<City> GetCitiesByProvince(int provinceId)
{
List<City> result = new List<City>();
result.Add(new City() { ID = 1, Name = "石家莊市",ProvinceID = 1,ZipCode = "001"});
result.Add(new City() { ID = 2, Name = "張家口市", ProvinceID = 1, ZipCode = "002"});
result.Add(new City() { ID = 3, Name = "邯鄲市", ProvinceID = 1, ZipCode = "003" });
result.Add(new City() { ID = 4, Name = "南京市", ProvinceID = 2, ZipCode = "004" });
result.Add(new City() { ID = 5, Name = "蘇州市", ProvinceID = 2, ZipCode = "005" });
result.Add(new City() { ID = 6, Name = "常州市", ProvinceID = 2, ZipCode = "006" });
result.Add(new City() { ID = 7, Name = "靜安區", ProvinceID = 3, ZipCode = "007" });
result.Add(new City() { ID = 8, Name = "楊浦區", ProvinceID = 3, ZipCode = "008" });
return result.Where(r => r.ProvinceID == provinceId).ToList();
} }
13.3 編寫控制層
public JsonResult GetProvinces()
{
List<SelectListItem> items = new List<SelectListItem>();
var provinces = ProvincAndCityBaseData.GetProvices();
foreach (Province p in provinces)
{
items.Add(new SelectListItem()
{
Text = p.Name,
Value = Convert.ToString(p.ID)
});
}
if (!items.Count.Equals(0))
{
items.Insert(0, new SelectListItem(){Text = "請選擇",Value = ""});
}
return Json(items, JsonRequestBehavior.AllowGet);
}
public JsonResult GetCities(string id)
{
List<SelectListItem> items = new List<SelectListItem>();
if (!string.IsNullOrEmpty(id))
{
var cities = ProvincAndCityBaseData.GetCitiesByProvince(int.Parse(id));
foreach (City c in cities)
{
items.Add(new SelectListItem()
{
Text = string.Concat(c.ZipCode, " ",c.Name),
Value = c.ID.ToString()
});
}
if (!items.Count.Equals(0))
{
items.Insert(0, new SelectListItem(){Text = "請選擇",Value = ""});
}
}
return Json(items, JsonRequestBehavior.AllowGet);
}
13.4 編寫視圖
選擇省:<select id="p"></select> <br/>
選擇市:<select id="c"></select>
@section scripts {
<script type="text/javascript">
$(function() {
getProvince();
$('#p').change(function() {
changeCity();
});
});
//加載省
function getProvince() {
$.getJSON('@Url.Action("GetProvinces","Home")', function (data) {
$('#p').empty();
$.each(data, function(i, item) {
$('#p').append($('<option></option>').val(item.Value).text(item.Text));
});
});
}
//設置城市清空
function emptyCity() {
$('#c').empty();
$('#c').append($('<option></option>').val('').text('請選擇'));
}
//根據省加載城市
function changeCity() {
var selectedProvinceId = $.trim($('#p option:selected').val());
if (selectedProvinceId.length == 0) {
emptyCity();
} else {
$.getJSON('@Url.Action("GetCities","Home")', { id: selectedProvinceId }, function (data) {
$('#c').empty();
$.each(data, function(i, item) {
$('#c').append($('<option></option>').val(item.Value).text(item.Text));
});
});
}
} </script>
}