asp .net mvc @ Alan Tsai 的學習筆記|An Asp .Net Mvc Web Developer Blog

asp .net mvc


[jquery]jquery ajax post能夠正確Model Bind到Asp .net Mvc網站 - 三種不同情境的建議做法

image
圖片來源:https://pixabay.com/en/key-tag-security-label-symbol-2114047/

Model Binding是Asp .net Mvc裡面用來處理表單送出(Form Post)資料自動轉成強型別的機制。

一般來說,如果用HtmlHelper產生的html內容,在Post back的時候Model Binding基本上不會遇到什麼問題。

不過為了網站responsive更好,很多時候會希望Form Post是透過ajax來做。

這個時候依據不同做法,就很容易造成form post到asp .net mvc的時候Model Binding不到。

這篇將會建議不同情境的時候應該如何寫正確的Jquery Form post寫法,避免Model Binding不到的問題。

這篇文章相關的範例程式碼在:https://github.com/alantsai-samples/aspnetmvc-jquery-post-model-binding-sample,有用tag標註每一個不同的情境。

[Asp .Net Mvc]http status 400 的JsonResult在正式機器無法取得回傳的Json資料

在之前介紹客制JsonResult的時候([iThome 第七屆鐵人賽 28] Javascript和Mvc溝通 - 概念篇[iThome 第七屆鐵人賽 29] Javascript和Mvc溝通 - 實作篇),其中一個原因是爲了讓回傳的資訊可以利用http裏面的狀態碼(status code)設定為400來表示Json結果是錯誤, 然後前端接到的時候可以直接透過在error事件的function來處理有出錯的邏輯。而不是要在success function裏面透過回傳的json物件來判斷是否有成功。

在實際使用的時候,開發都沒有什麽問題,但是在正式機器的時候出現bug,會導致沒有辦法取得回傳的Json物件內容

這篇將會介紹發生的原因和如何處理。


[iThome 第七屆鐵人賽 29] Javascript和Mvc溝通 - 實作篇

上一篇介紹完了在Mvc的框架裡面,用Json方式傳遞資料的問題之後,接下來將會看這些問題將會如何解決。


[iThome 第七屆鐵人賽 27] View相關的處理 - 框架自動增加Model Metadata

在上一篇介紹完了什麽是Model Metadata和Mvc的Html Helper如何利用Metadata來產生開發者想要的Html內容,在這一篇將會介紹框架如何能夠提供一些基礎架設方便產生和我們view能夠對應的Model Metadata。


[iThome 第七屆鐵人賽 28] Javascript和Mvc溝通 - 概念篇

隨著前端處理的需求越來越高和前端框架的進化,前端變的更加容易,並且給更好的使用者體驗,身為開發者通常都需要使用到AJAX的技術,避免使用者需要一直切換和刷新頁面。

Mvc裡面提供了非常好框架,讓要回傳JSON變的非常方便,但是有些地方做的還是有點不夠好。

因此,這一篇將會介紹Mvc處理不好的地方和如何修正的概念內容,下一篇在介紹如何實作。


[iThome 第七屆鐵人賽 26] View相關的處理 - Model的Metadata介紹

Service層的部份到目前為止已經介紹了基本的CRUD,搜索方面的自動處理和一些資料驗證的部份。是時候來切換一下看在View的部份框架還能夠幫到什麽。

在這一篇將會介紹所謂的Model Metadata,並且概念上來說如何用框架打造一些好用的功能,並且在下一篇來實作。


[iThome 第七屆鐵人賽 24] 搜索頁面 - Service層的工作 - View方面的處理

在上一篇介紹完了Service如何自動處理搜索和Controller如何呼叫這個Service之後,接下來就要看view將會如何呼叫,並且透過一些Helper方便產生有正確RouteValue的連接。


[iThome 第七屆鐵人賽 19] 框架產生下拉式資料的內容

這一篇,回到Controller常常需要做的一件事情,那就是當如果欄位屬於下拉式選單的時候,需要準備好下拉式清單的資料。

如果用的是預設的方式去產生下拉式選單其實有很多問題,這一篇想透過框架的方式,讓產生下拉式清單的資料能夠自動化。



[iThome 第七屆鐵人賽 17] 資料驗證 - 思路篇

在任意的Application裡面,都一定需要儲存資料。而這些資料的正確性是非常重要。舉例來說,以一篇部落格文章來說,這篇文章一定要有“標題”和“作者”,如果沒有這兩個資訊,這篇部落格文章更本就不算是文章。因此,確認進入資料庫的內容的資料是否正確(或者說符合領域裡面的規則),這就是資料正確性。

在Mvc裡面,有一個非常好的基本資料驗證服務,也就是用DataAnnotation定下欄位基本規則,讓Mvc在Model Binding的時候就會做基本的資料驗證。

但是那個只是單一的資料驗證,邏輯性的資料驗證呢?例如,需要和另外一個資料庫欄位做比對。這個光靠DataAnnotation是不夠的,只能夠在service層級來做這方面的資料驗證。

在來,當資料要實際儲存的時候Entity Framework這邊也會有實際DB欄位的資訊,有時候會和DataAnnotation設定的不一樣,導致儲存的時候炸掉。

上面提到3個層面,其實並沒有一個統一整合的東西把它們包在一起,導致在開發專案的時候,每一個人處理這三個層面的方式都不一樣。

因此,接下來要看的是,框架如何把這些驗證的地方整合在一起。


[iThome 第七屆鐵人賽 12] BaseController的重要性

在這一篇將會介紹爲什麽對框架來說有一個BaseController讓所有的Controller來繼承很重要,並且介紹一個簡單的強型別的RedirectToAction讓所有繼承這個BaseController的可以來使用。

透過這個強型別的RedirectToAction讓在寫Code的時候,不要犯下寫錯Action的名字,或者Action名字改了但是對應的RedirectToAction沒有改到的低級錯誤。


[iThome 第七屆鐵人賽 11] 傳遞資訊到前端的通用型服務

到目前為止,已經介紹了很多屬於基礎建設的部份。從核心的DI用Autofac開始,再到那裡都使用的到的Log服務。再來介紹了ViewModel和如何透過框架來讓對應變得更加簡單。最後介紹了透過Repository 和 Unit of work,使得實際的DAL層級能夠被abstraction出來。

在這一篇,將會介紹比較偏向Controller層級的內容,也就是每一個application一定會使用到的:如何提供一種一致性的服務用於從Server傳遞訊息到客戶端?


[iThome 第七屆鐵人賽 06] ViewModel的重要性

在這一篇我們將來看一下在寫Mvc裡面最重要的一個概念,也就是強型別的View(Strong Type View)和ViewModel。


[iThome 第七屆鐵人賽 04] Autofac和Asp .Net Mvc結合

在上一篇我們介紹了Autofac的基本概念,還有它裡面比較常用的專有名詞,詳細對於Autofac有了一些了解。

在這一篇,我將會介紹如何讓我們在Asp .Net Mvc裡面,簡單的使用Autofac作為我們的DI Container。


[iThome 第七屆鐵人賽 03] Autofac基本介紹

在上一篇:IoC基本概念介紹介紹了IoC和DI的概念。在最後提到了,如果沒有一個東西幫我們管理DI,那麼其實整個的彈性設計還是無法彈性起來。

因此在這一篇,我們就來看一下其中一個比較常用的DI Container:Autofac。


[iThome 第七屆鐵人賽 02] IoC基本概念介紹

在實際開始進入Asp .net Mvc之前,我們需要先來看一下一個很重要的概念,那就是IoC。

可以說IoC是框架的核心,基本上只要具備一定規模的框架,通常都會使用IoC和DI的搭配,因此我們需要先瞭解它的概念才能夠實際開始我們的框架開發。