【ASP.MVC】ModelState 中繼 Clear() 說明
ModelState 原理
頁面上資料 post 後 ,會copy 一份給 中繼資料
到後端程式 如果有修改 model 相關欄位的值,return View(model) 到 頁面的話
必需 有兩種方法
1.ModelState.Remove("欄位名")
2.ModelState.Clear(); <-- model="" p="">
以 View 裡面的 接收讀取程式資料 以 ModelState(中繼資料)為優先,再來是 model
所以 在 View 上面 會先判斷 ModelState(中繼資料) 內容是否為空或有值,若空值的話,就會以 return model 資料為準
所以在測試時 ,textbox 我們在 View 上有更改資料,post 到程式端後,又改了 textbox 裡面的值..結果return model 回傳到頁面..結果只會顯示第一次 textbox 的值,原因就在這!
這是 ASP.MVC 上對 ModelState 規則...有些人覺得不好,有些人覺得不好...看個人了.
-->
2018年10月2日 星期二
2017年11月6日 星期一
【ASP.MVC】 剛好裝好SERVER , 佈署 MVC 出現的問題
剛好裝好SERVER , 佈署 MVC 出現的問題
1.500 錯誤 ,請重新安裝
%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis.exe -ir
2.必安裝 KB980368
安裝此更新可讓處理常式對應能正確地搭配無延伸型 URL 使用。
1.500 錯誤 ,請重新安裝
%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis.exe -ir
2.必安裝 KB980368
安裝此更新可讓處理常式對應能正確地搭配無延伸型 URL 使用。
2017年8月16日 星期三
【瀏覽器】Chrome 瀏覽器 版本 記錄
Chrome 49 XP 最後版
Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.112 Safari/537.36
圖示如下:
Chrome 18 穩定版
Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.3 Safari/535.19
圖示如下:
Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.112 Safari/537.36
圖示如下:
Chrome 18 穩定版
Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.3 Safari/535.19
圖示如下:
2017年2月16日 星期四
【ASP.MVC】Line 瀏覽器 UserAgent 資料 Line/7.0.1/IAB
UserAgent 記錄如下:
2016年10月20日 星期四
【ASP.MVC】私房菜 MVC 30 招
第一招 (2016/10/23):
Html.AntiForgeryToken 自動 在 X-Frame-Options 中加上:SAMEORIGIN"
說明:禁止其它網站使用 Iframe 崁入
針對:X-Frame-Options 說明請參考以下網址:
網址:https://developer.mozilla.org/zh-TW/docs/HTTP/X-Frame-Options
第二招 (2016/10/25):
jQuery Validation 驗證表單
說明:找出尚有錯誤訊息,禁止 form.Submit()
針對:$("form").data("validator").errorList.length
網址:http://www.codeproject.com/Tips/539167/Modify-jQuery-validation-settings-using-MVC-unobtr
第三招(SQL ELMAH_Error)
ELMAH Utc 轉 Local Time
SELECT CONVERT(datetime,
SWITCHOFFSET(CONVERT(datetimeoffset,
ELMAH_Error.TimeUtc),
DATENAME(TzOffset, SYSDATETIMEOFFSET())))
AS ColumnInLocalTime
FROM ELMAH_Error
第四招( IIS SSL 443 PORT)
說明:明明設定了 443 port 確無法顯示正常的 一個鎖的狀態
針對:因為你的網站頁面上面, including 外站資料 ,比如IMAGE 圖檔或 JavaScript 檔案
案例如下:
待續...
Html.AntiForgeryToken 自動 在 X-Frame-Options 中加上:SAMEORIGIN"
說明:禁止其它網站使用 Iframe 崁入
針對:X-Frame-Options 說明請參考以下網址:
網址:https://developer.mozilla.org/zh-TW/docs/HTTP/X-Frame-Options
第二招 (2016/10/25):
jQuery Validation 驗證表單
說明:找出尚有錯誤訊息,禁止 form.Submit()
針對:$("form").data("validator").errorList.length
網址:http://www.codeproject.com/Tips/539167/Modify-jQuery-validation-settings-using-MVC-unobtr
第三招(SQL ELMAH_Error)
ELMAH Utc 轉 Local Time
SELECT CONVERT(datetime,
SWITCHOFFSET(CONVERT(datetimeoffset,
ELMAH_Error.TimeUtc),
DATENAME(TzOffset, SYSDATETIMEOFFSET())))
AS ColumnInLocalTime
FROM ELMAH_Error
第四招( IIS SSL 443 PORT)
說明:明明設定了 443 port 確無法顯示正常的 一個鎖的狀態
針對:因為你的網站頁面上面, including 外站資料 ,比如IMAGE 圖檔或 JavaScript 檔案
案例如下:
錯誤內容 including 其它網站 圖片或 js 檔,引發無法驗證成ssl 檔案 |
正確網址 |
待續...
2016年8月27日 星期六
【ASP.MVC】驗証
數字:"^[0-9]*$"。
n位的數字:"^\d{n}$"。
至少n位的數字:"^\d{n,}$"。
m~n位的數字:。"^\d{m,n}$"
零和非零開頭的數字:"^(0|[1-9][0-9]*)$"。
有兩位小數的正實數:"^[0-9]+(.[0-9]{2})?$"。
有1~3位小數的正實數:"^[0-9]+(.[0-9]{1,3})?$"。
非零的正整數:"^\+?[1-9][0-9]*$"。
非零的負整數:"^\-[1-9][]0-9"*$。
長度為3的字符:"^.{3}$"。
由26個英文字母組成的字符串:"^[A-Za-z]+$"。
由26個大寫英文字母組成的字符串:"^[AZ]+$"。
由26個小寫英文字母組成的字符串:"^[az]+$"。
由數字和26個英文字母組成的字符串:"^[A-Za-z0-9]+$"。
由數字、26個英文字母或者下劃線組成的字符串:"^\w+$"。
驗證用戶密碼:"^[a-zA-Z]\w{5,17}$"正確格式為:以字母開頭,長度在6~18之間,只能包含字符、數字和下劃線。
驗證是否含有^%&',;=?$\"等字符:"[^%&',;=?$\x22]+"。
只能輸入漢字:"^[\u4e00-\u9fa5]{0,}$"
驗證Email地址:"^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$"。
驗證InternetURL:"^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$"。
驗證電話號碼:"^(\(\d{3,4}-)|\d{3.4}-)?\d{7,8}$"正確格式為:"XXX-XXXXXXX"、"XXXX- XXXXXXXX "、"XXX-XXXXXXX"、"XXX-XXXXXXXX"、"XXXXXXX"和"XXXXXXXX"。
驗證身份證號(15位或18位數字):"^\d{15}|\d{18}$"。
驗證一年的12個月:"^(0?[1-9]|1[0-2])$"正確格式為:"01"~"09"和"1"~"12"。
驗證一個月的31天:"^((0?[1-9])|((1|2)[0-9])|30|31)$"正確格式為;"01"~"09"和"1"~"31"。
ModelState.AddModelError方法是給View返回一個錯誤消息,最終交給@Html.ValidationSummary顯示。
n位的數字:"^\d{n}$"。
至少n位的數字:"^\d{n,}$"。
m~n位的數字:。"^\d{m,n}$"
零和非零開頭的數字:"^(0|[1-9][0-9]*)$"。
有兩位小數的正實數:"^[0-9]+(.[0-9]{2})?$"。
有1~3位小數的正實數:"^[0-9]+(.[0-9]{1,3})?$"。
非零的正整數:"^\+?[1-9][0-9]*$"。
非零的負整數:"^\-[1-9][]0-9"*$。
長度為3的字符:"^.{3}$"。
由26個英文字母組成的字符串:"^[A-Za-z]+$"。
由26個大寫英文字母組成的字符串:"^[AZ]+$"。
由26個小寫英文字母組成的字符串:"^[az]+$"。
由數字和26個英文字母組成的字符串:"^[A-Za-z0-9]+$"。
由數字、26個英文字母或者下劃線組成的字符串:"^\w+$"。
驗證用戶密碼:"^[a-zA-Z]\w{5,17}$"正確格式為:以字母開頭,長度在6~18之間,只能包含字符、數字和下劃線。
驗證是否含有^%&',;=?$\"等字符:"[^%&',;=?$\x22]+"。
只能輸入漢字:"^[\u4e00-\u9fa5]{0,}$"
驗證Email地址:"^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$"。
驗證InternetURL:"^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$"。
驗證電話號碼:"^(\(\d{3,4}-)|\d{3.4}-)?\d{7,8}$"正確格式為:"XXX-XXXXXXX"、"XXXX- XXXXXXXX "、"XXX-XXXXXXX"、"XXX-XXXXXXXX"、"XXXXXXX"和"XXXXXXXX"。
驗證身份證號(15位或18位數字):"^\d{15}|\d{18}$"。
驗證一年的12個月:"^(0?[1-9]|1[0-2])$"正確格式為:"01"~"09"和"1"~"12"。
驗證一個月的31天:"^((0?[1-9])|((1|2)[0-9])|30|31)$"正確格式為;"01"~"09"和"1"~"31"。
ModelState.AddModelError方法是給View返回一個錯誤消息,最終交給@Html.ValidationSummary顯示。
2016年7月15日 星期五
2016年7月12日 星期二
【ASP.NET】NuGet 封裝管理員 Migrations
啟用 Code First 移轉
【指令】
Enable-Migrations
Add-Migration init
Update-Database
參數-1:-Force 強制更新
參數-2:-Verbose
系統自動產生資料表:__MigrationHistory
【使用 Code First 移轉而不使用初始設定式】
說明:You get the script within Visual Studio. Notice that this will create a new table called __MigrationsHistory which is used by Entity Framework to keep track of migrations.
說明連結:http://martinnormark.com/entity-framework-migrations-cheat-sheet/
public Configuration()
{
AutomaticMigrationsEnabled = false;
}
【在移轉中植入資料】
Msdn 官網說法:
DbMigrationsConfiguration.Seed 方法
[此頁面專屬於 Entity Framework 第 6 版。最新版本可從 'Entity Framework' NuGet 套件取得。如需 Entity Framework 的詳細資訊,請參閱 msdn.com/data/ef。]
在升級為最新的移轉之後執行,以便允許更新初始資料。
【相關參考網址如下】
https://azure.microsoft.com/zh-tw/documentation/articles/mobile-services-dotnet-backend-how-to-use-code-first-migrations/
http://martinnormark.com/entity-framework-migrations-cheat-sheet/
https://dotblogs.com.tw/kevinya/2013/10/31/126299
Msdn官網:https://msdn.microsoft.com/zh-tw/data/jj591621.aspx
【指令】
Enable-Migrations
Add-Migration init
Update-Database
參數-1:-Force 強制更新
參數-2:-Verbose
系統自動產生資料表:__MigrationHistory
【使用 Code First 移轉而不使用初始設定式】
說明:You get the script within Visual Studio. Notice that this will create a new table called __MigrationsHistory which is used by Entity Framework to keep track of migrations.
說明連結:http://martinnormark.com/entity-framework-migrations-cheat-sheet/
public Configuration()
{
AutomaticMigrationsEnabled = false;
}
【在移轉中植入資料】
Msdn 官網說法:
DbMigrationsConfiguration
[此頁面專屬於 Entity Framework 第 6 版。最新版本可從 'Entity Framework' NuGet 套件取得。如需 Entity Framework 的詳細資訊,請參閱 msdn.com/data/ef。]
在升級為最新的移轉之後執行,以便允許更新初始資料。
【相關參考網址如下】
https://azure.microsoft.com/zh-tw/documentation/articles/mobile-services-dotnet-backend-how-to-use-code-first-migrations/
http://martinnormark.com/entity-framework-migrations-cheat-sheet/
https://dotblogs.com.tw/kevinya/2013/10/31/126299
Msdn官網:https://msdn.microsoft.com/zh-tw/data/jj591621.aspx
【ASP.MVC Identity 2.0】如何使用 ASP.MVC Identity 2.0
AspNetRoles【Table:角色】
Id
Name
RoleName 【備註】擴充欄位
Discriminator 【備註】擴充欄位-系統自動新增【值:IdentityRole】 中譯‧辨別者,屬於哪個類別使用
AspNetUsers 【Table:使用者】
LockoutEnabled 【備註】是否要驗證錯誤次數 <--- p="">LockoutEndDateUtc 【備註】鎖定日期時間內
AccessFailedCount 【備註】輸入錯誤次數
// 預設需要去「驗證」輸入錯誤計算
manager.UserLockoutEnabledByDefault = true;
//限定自動增加 下次驗證 時間 ,以分為計算
manager.DefaultAccountLockoutTimeSpan = TimeSpan.FromMinutes(5);
//驗證最多錯誤次數
manager.MaxFailedAccessAttemptsBeforeLockout = 5;
當 LockoutEnabled = 1 時,且 DateTime.Now 小於 LockoutEndDateUtc ,
則 SignInStatus.LockedOut 狀態
因 --->LockoutEndDateUtc 是美國時間
若要轉換本地時間 設定如下
DateTimeOffset local_date = DateTime.SpecifyKind(user.LockoutEndDateUtc.Value, DateTimeKind.Utc);
ASP.NET 以 DateTimeOffset 為時間正規共用核心,再透過 區域設定(DateTimeKind.Utc) 轉換正規時間,之後就能 出輸成 local_date.LocalDateTime
<--- p="">
參考網址:
http://qiita.com/standtsukai/items/056e422bed8a57467778
http://www.tqcto.com/article/web/29166.html
http://tech.trailmax.info/2014/06/asp-net-identity-user-lockout/
--->
Id
Name
RoleName 【備註】擴充欄位
Discriminator 【備註】擴充欄位-系統自動新增【值:IdentityRole】 中譯‧辨別者,屬於哪個類別使用
AspNetUsers 【Table:使用者】
LockoutEnabled 【備註】是否要驗證錯誤次數 <--- p="">LockoutEndDateUtc 【備註】鎖定日期時間內
AccessFailedCount 【備註】輸入錯誤次數
// 預設需要去「驗證」輸入錯誤計算
manager.UserLockoutEnabledByDefault = true;
//限定自動增加 下次驗證 時間 ,以分為計算
manager.DefaultAccountLockoutTimeSpan = TimeSpan.FromMinutes(5);
//驗證最多錯誤次數
manager.MaxFailedAccessAttemptsBeforeLockout = 5;
當 LockoutEnabled = 1 時,且 DateTime.Now 小於 LockoutEndDateUtc ,
則 SignInStatus.LockedOut 狀態
因 --->LockoutEndDateUtc 是美國時間
若要轉換本地時間 設定如下
DateTimeOffset local_date = DateTime.SpecifyKind(user.LockoutEndDateUtc.Value, DateTimeKind.Utc);
ASP.NET 以 DateTimeOffset 為時間正規共用核心,再透過 區域設定(DateTimeKind.Utc) 轉換正規時間,之後就能 出輸成 local_date.LocalDateTime
<--- p="">
參考網址:
http://qiita.com/standtsukai/items/056e422bed8a57467778
http://www.tqcto.com/article/web/29166.html
http://tech.trailmax.info/2014/06/asp-net-identity-user-lockout/
--->
2016年7月10日 星期日
【ASP.MVC】Partial View 說明
Partial View 說明
說明:類似 UserControl ASP.NET 使用者控制項 (.ascx 檔案)
Msdn Url:https://msdn.microsoft.com/zh-tw/library/system.web.mvc.html(v=vs.118).aspx
【以下有幾種方式達到 「Partial View」效果】
1.【Using System.Web.Mvc.Html.(Partial)Extensions 類別】
說明:部分檢視轉譯為 HTML 編碼字串的功能 (因轉換 Html 效能會慢點)
Msdn Url:https://msdn.microsoft.com/zh-tw/library/system.web.mvc.html.partialextensions(v=vs.118).aspx
程式範例:
Html.Partial("ViewName")
Html.Partial("ViewName","Model")
2.【Using System.Web.Mvc.Html.(RenderPartial)Extensions 類別】
說明:叫用指定的子系動作方法,並呈現內嵌於父檢視內的結果。
Msdn Url:https://msdn.microsoft.com/zh-tw/library/system.web.mvc.html.renderpartialextensions(v=vs.118).aspx
程式範例
Html.RenderPartial("_LoginPartial");
Html.RenderPartial("ViewName","Model")
PS.綜合以上1.2 說明,使用情境 Master Layout 將[資料]帶入給 Parent(Partial、RenderPartial) 使用
【Using System.Web.Mvc.Html.ChildActionExtensions 類別】
說明:代表支援[呼叫]子系動作[方法]並支援[呈現]內嵌於[父檢視]中的結果。
Msdn Url:https://msdn.microsoft.com/zh-tw/library/system.web.mvc.html.childactionextensions(v=vs.118).aspx
底下再分層 兩大類功能,可透過 Control 底下 Action 回傳 資料模組
1.(Action)
說明:部分檢視轉譯為 HTML 編碼字串的功能 (因轉換 Html 效能會慢點)
Msdn 說明:叫用指定的子系動作方法並以 HTML 字串形式傳回結果。
連結:https://msdn.microsoft.com/zh-tw/library/ee721266(v=vs.118).aspx
程式範例:
Html.Action("_LoginPartial");
Html.Action("_LoginPartial","ActionName");
2.(RenderAction)
說明:
Msdn Url:https://msdn.microsoft.com/zh-tw/library/ee703541(v=vs.118).aspx
程式範例:
Html.RenderAction("_LoginPartial");
Html.RenderAction("actionName","controllerName");
@{ Html.RenderAction("MenuAction", "BackLayout"); }
PS.綜合以上1.2 說明,Action 顧名思義 就是會透過後端Control 呼叫 Action 程式回傳(資料) For View 使用
圖示如下:
說明:類似 UserControl ASP.NET 使用者控制項 (.ascx 檔案)
Msdn Url:https://msdn.microsoft.com/zh-tw/library/system.web.mvc.html(v=vs.118).aspx
【以下有幾種方式達到 「Partial View」效果】
1.【Using System.Web.Mvc.Html.(Partial)Extensions 類別】
說明:部分檢視轉譯為 HTML 編碼字串的功能 (因轉換 Html 效能會慢點)
Msdn Url:https://msdn.microsoft.com/zh-tw/library/system.web.mvc.html.partialextensions(v=vs.118).aspx
程式範例:
Html.Partial("ViewName")
Html.Partial("ViewName","Model")
2.【Using System.Web.Mvc.Html.(RenderPartial)Extensions 類別】
說明:叫用指定的子系動作方法,並呈現內嵌於父檢視內的結果。
Msdn Url:https://msdn.microsoft.com/zh-tw/library/system.web.mvc.html.renderpartialextensions(v=vs.118).aspx
程式範例
Html.RenderPartial("_LoginPartial");
Html.RenderPartial("ViewName","Model")
PS.綜合以上1.2 說明,使用情境 Master Layout 將[資料]帶入給 Parent(Partial、RenderPartial) 使用
【Using System.Web.Mvc.Html.ChildActionExtensions 類別】
說明:代表支援[呼叫]子系動作[方法]並支援[呈現]內嵌於[父檢視]中的結果。
Msdn Url:https://msdn.microsoft.com/zh-tw/library/system.web.mvc.html.childactionextensions(v=vs.118).aspx
底下再分層 兩大類功能,可透過 Control 底下 Action 回傳 資料模組
1.(Action)
說明:部分檢視轉譯為 HTML 編碼字串的功能 (因轉換 Html 效能會慢點)
Msdn 說明:叫用指定的子系動作方法並以 HTML 字串形式傳回結果。
連結:https://msdn.microsoft.com/zh-tw/library/ee721266(v=vs.118).aspx
程式範例:
Html.Action("_LoginPartial");
Html.Action("_LoginPartial","ActionName");
2.(RenderAction)
說明:
Msdn Url:https://msdn.microsoft.com/zh-tw/library/ee703541(v=vs.118).aspx
程式範例:
Html.RenderAction("_LoginPartial");
Html.RenderAction("actionName","controllerName");
@{ Html.RenderAction("MenuAction", "BackLayout"); }
PS.綜合以上1.2 說明,Action 顧名思義 就是會透過後端Control 呼叫 Action 程式回傳(資料) For View 使用
圖示如下:
Partial View 說明流程圖 |
【ASP.MVC】工具 Intellisense 一下出現 又馬上消失問題
CTRL + SHIFT + J 重新更新 View 上面的 Script Intellisense
解決一下出現 又馬上消失問題
2016年7月5日 星期二
【Asp.MVC】SessionID 每次都不一樣 問題
【Asp.MVC】SessionID 每次都不一樣 問題
HttpContext.Session.SessionID
因為在 Global.asax 檔案內 沒有 Session 事件記錄
新增以下兩行:
protected void Session_Start(object sender, EventArgs e)
{
}
protected void Session_End(object sender, EventArgs e)
{
}
就搞定了
HttpContext.Session.SessionID
因為在 Global.asax 檔案內 沒有 Session 事件記錄
新增以下兩行:
protected void Session_Start(object sender, EventArgs e)
{
}
protected void Session_End(object sender, EventArgs e)
{
}
就搞定了
2016年5月6日 星期五
【ASP.Net MVC】 Tool MVC.Elmah、 Elmah.Mvc
NuGet 安裝指令:
Elmah.MVC 安裝 指令:Install-Package Elmah.MVC
elmah 資料庫 指令:Install-Package elmah.sqlserver
elmah 資料庫可以不用安裝,但 Elmah.MVC 要安裝,他會建立一個xml error
至於 elmah 資料庫 他會把 error 寫在資料庫
比較完整說明 - 參考連結:http://koko.ntex.tw/wordpress/asp-net-mvc-setup-elmah-and-nlog-1-intro-install-elmah/
舊版說明 參考連結:http://blog.miniasp.com/post/2013/03/12/ASPNET-MVC-4-and-ELMAH-Integration.aspx
Elmah.MVC 安裝 指令:Install-Package Elmah.MVC
elmah 資料庫 指令:Install-Package elmah.sqlserver
elmah 資料庫可以不用安裝,但 Elmah.MVC 要安裝,他會建立一個xml error
至於 elmah 資料庫 他會把 error 寫在資料庫
比較完整說明 - 參考連結:http://koko.ntex.tw/wordpress/asp-net-mvc-setup-elmah-and-nlog-1-intro-install-elmah/
舊版說明 參考連結:http://blog.miniasp.com/post/2013/03/12/ASPNET-MVC-4-and-ELMAH-Integration.aspx
訂閱:
文章 (Atom)