錯誤補正
當沒指定get或set方法,編譯時會被當成欄位(Field)而非屬性(Property)
而MVC在處理資料繫結時,只會取屬性(Property),因為實務上欄位(Field)不該對外露出。
在宣告物件的時候,標準的寫法是
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;
}
}