結合你不需要自定義模型綁定,只需使用語法在Razor視圖列表:
@for (int i = 0; i < Model.SomeCollectionProperty.Count; ++i)
{
@Html.TextBoxFor(m => m.SomeCollectionProperty[i])
}
這就是說,如果你做需要創建一個自定義的模型綁定對於更復雜的情況,您只需實施IModelBinder或覆蓋例如DefaultModelBinder的BindProperty
方法,並將其註冊到MVC框架。
在第一種情況下,你登記在你global.asax
的Application_Start
定製粘合劑,像這樣:
ModelBinders.Binders.Add(typeof(MyFancyType), new MyFancyTypeModelBinder());
在第二種情況下,更換像這樣的默認模型綁定:
ModelBinders.Binders.DefaultBinder = new MyExtendedDefaultModelBinder();
在這兩種情況下,您的模型聯編程序類都需要是線程安全的,因爲所有http請求都使用相同的模型聯編程序實例。
作爲第三種選擇,你其實可以採取模型綁定建設的全面控制通過實施IModelBinderProvider,並像這樣註冊它:
ModelBinderProviders.BinderProviders.Add(new MyModelBinderProvider());
我所知道的是使用ModelBinderAttribute最後一個選項,像這樣
[ModelBinder(typeof(MyCustomModelBinder))]
public class MyModelClass
{
public class MyCustomModelBinder : DefaultModelBinder
{
...
}
...
}
在上面的例子中,模型粘合劑實際上嵌套在模型類的內部,但它可以分別被定義爲好。
我傾向於傾向於實施IModelBinder
並將其註冊到模型活頁夾字典中 - 因爲這使我可以通過一個簡單的註冊輕鬆地在多個模型中重複使用同一類型。在極少數情況下,我需要完全自定義特定模型的模型綁定,我將使用最後一種方法。
但是如果我從一個新對象開始,並且想要添加到列表中,這意味着它以Count = 0開始。就我而言,您發佈的代碼將用於編輯數據 –
然後你可以使用string.Empty填充你想要允許的許多項目。如果要動態添加項目,可以將新項目追加到發佈操作的列表中,或者通過創建遵循模型綁定命名約定的新元素在客戶端執行。 – Nathan