MVC表單傳值時Model Binding注意事項

  • 265
  • 0
  • 2023-10-27

表單傳值給Action時,ModelBinding要注意的東西,用不好可是會Binding到天荒地老都還接不到參數阿。

1.當ViewModel為多階層時,如上面範例的Index.SearchCon。如果Action的接收參數的型別為Index.SearchCon時,後端如果要能接收的到表單資料的話,表單物件的name要為SearchCon.Func_Name,如果name跟Model對應不起來的話,會接不到參數。
[Parents_Class.Property Name].[Sub_Class.Property Name]。

例如:

1.參數結構為單一階層結構

如果Action參數型別為ProFunction.SearchCon的話,那麼表單物件的name為Func_Name就可以了

2.參數結構為單多層結構

如果Action參數型別為ProFunction.Index的話,那麼表單物件的name就要為SearchCon.Func_Name

Razor語法從新命名表單物件的name
Action
Js語法
Js物件的值

 

Action接收到的參數內容

 

如果覺得另外取表單物件的name這樣很麻煩的話,其實也可以直接把ViewModel的內容轉成Json字串,MVC的ModelBinding會自己mapping,到Action時再把他轉回物件這樣也可以。

或是可以再ViewModel加上Attribute來另外指定Property的BindingName(參考ref.連結2),但這個方法我是沒有用過。

 




ref:
[鐵人賽Day10] - Model Binding
ASP.NET MVC Model Binding with Dashes in Form Element Names