2017年10月24日 星期二

[.Net/VS] Could not load file or assembly 'Microsoft.Web.Deployment'與莫名發行失敗(fail no output message)


● 使用VS針對web application使用發行,
出現Could not load file or assembly 'Microsoft.Web.Deployment, Version=9.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35', 究竟發生什麼事??

原以為是web application需要參考Microsoft.Web.Deployment,
經過一番嘗試之後,
發現在本機(client端)安裝web deploy即可。

安裝完到路徑C:\Program Files,會出現IIS\Microsoft Web Deploy V3資料夾,
裡面會有Microsoft.Web.Deployment.dll,如下圖。



● 發行後,VS左下角狀態列出現發行失敗,且無其他訊息。

可將專案實體資料夾下bin內檔案手動清除,再發行看看。

2017年10月22日 星期日

[.Net/VS] Web Deployment 工作失敗:Microsoft.Web.Deployment.DeploymentManager的類型初始設定式發生例外狀況(threw an exception type initializer)

說明:
使用VS內建發行,點選「驗證連接(Validate Connection)」,
出現如下錯誤訊息。


解法:
搜尋網路解法,有人說要解除Microsoft Web Deploy dbSqlPackage Provider(如下圖所示),
但是我的Server並無安裝該程式。


又看到重新安裝Server上Web deploy的解法,

於是使用Web Platform Installer 5.0安裝:
● web deploy 3.6
● web deploy 3.6 for Hosting Servers
● web deploy 3.6 without bundled SQL support(latest)

再到控制台->解除安裝程式,
找到web deploy 3.6後,點選「變更」,
改成完全安裝就可以了,如下圖。



參考資料:
https://docs.microsoft.com/en-us/iis/publish/using-web-deploy/web-deploy-automatic-backups
https://stackoverflow.com/questions/6351289/web-deployment-task-failed-the-type-initializer-for-microsoft-web-deployment
http://blog.sanc.idv.tw/2014/08/aspnet-web-deploymvciis.html

2017年10月17日 星期二

[.Net MVC] 使用ValidationAttribute與IClientValidatable自訂前後端驗證 (Input Date isn't greater than today)

說明:
之前提過Remote驗證預設沒有後端驗證,
雖然可以自行實作後端驗證。
但MVC提供了自訂驗證(Custom validation),
可自訂驗證邏輯,並含括前後端驗證,
既然是預設的,就來試看看吧。

實作:
首先,新增一類別做驗證,並宣告為sealed,
因該類別單純用來做驗證,
再繼承ValidationAttribute,並override IsValid(object value)方法,
方法內,編寫驗證邏輯。

P.S. 帶ValidationContext的isValid方法,
可存取ViewModel該驗證屬性的資訊。



掛上剛新增的類別,記得要using類別所在namespace。


但沒有觸發前端驗證??


因為繼承ValidationAttribute只有後端驗證,
所以要補上前端驗證,在驗證類別再加上實作IClientValidatable介面,
也就是實作GetClientValidationRules方法。
方法內,需建構ModelClientValidationRule instance,
其中ValidationType傳入字串需要小寫,用來連結前端的html attribute與js方法。


這個rule會render到該html element的attribute。


最後,透過實作jQuery.validator的自訂驗證方法。


前端驗證也觸發了。


參考資料:
http://www.c-sharpcorner.com/UploadFile/abhikumarvatsa/enabling-client-side-validation-on-custom-data-annotations-w/
http://demo.tc/post/687
https://jqueryvalidation.org/jQuery.validator.addMethod/