C# MVC 學習日記 — 傳遞複雜型別時的陷阱

莊創偉
2 min readNov 17, 2017

錯誤補正
當沒指定get或set方法,編譯時會被當成欄位(Field)而非屬性(Property)
而MVC在處理資料繫結時,只會取屬性(Property),因為實務上欄位(Field)不該對外露出。

MSDN

在宣告物件的時候,標準的寫法是

string studentID { get; set; }

但是偷懶寫成

string studentID;

在使用上也不會有任何問題

因為.Net在編譯時會自動幫我們補上後續的部分~

假設有一型別如下

public  class _clsStudentInfo {   public string StudentID = "1";   public string StudentName;   public string Sex { get; set; }}

在開發的過程中,不管三種寫法的哪一種,都可以正常取值與賦值

但是在使用MVC 進行複雜型別傳遞時,.Net 就不會再幫忙擦屁股了

假設送出的資料如下圖:

會得到如下的結果:

雖然MVC成功的將資料繫結到型別上,但是資料卻與輸入的不一樣。

只有Sex欄位成功的取得正確的值

這是因為MVC在做資料繫結時不會幫忙實作set的方法,

於是會發生不管怎麼送都是空值或初始值的情況,因為沒有對應的set 方法可以賦值

同理如果想給物件初始值的話必須寫成

string studentid;public string StudentID {  get {
if (studentid == null)
{ return "1";}
else { return studentid;}
}
set {
studentid = value;
}
}

--

--

莊創偉

學海無涯。但是為了生計還是得下海的風塵男子