Ну, если вы намерены написать все связующее с нуля, у вас не будет модели. Вместо этого вы на самом деле являетесь тем, кто создает модель (поскольку для этого используется связующее вещество), из данных формы. Такие, как:
return new SomeModel
{
OneProp = request.Form["OneProp"],
AnotherProp = request.Form["AnotherProp"]
}
В качестве альтернативы вы можете наследовать от DefaultModelBinder
вместо IModelBinder
, которые вы можете использовать, чтобы расширить только определенное поведение, а не на самом деле обработки построение модели.
EDIT:
Из ваших комментариев я понимающие, что вы только хочешь, чтобы обработать одно свойства в несколько ViewModels вы могли бы (возможно, несколько ViewModels имеют десятичные, которые приходят с точки зрения в другом формате, чем что MVC ожидает для десятичных знаков.
В этом случае я бы использовал другой подход. Вместо того, чтобы регистрировать ModelBinder в global.asax, я удалю его оттуда и сделаю это декларативно на реальных свойствах, которые нуждаются в этом Специальный формат.
Такие, как:
[PropertyBinder(typeof(MyDecimalBinder))]
public decimal SomePropInAViewModel {get; set;}
Это основано на общем подходе создания PropertyBindingAttribute: http://www.prideparrot.com/blog/archive/2012/6/customizing_property_binding_through_attributes или https://stackoverflow.com/a//1373170
И с ModelBinder похожее на это:
public class MyDecimalBinder : DefaultModelBinder {
protected override void BindProperty(ControllerContext controllerContext, ModelBindingContext bindingContext, PropertyDescriptor propertyDescriptor) {
// use the propertyDescriptor to make your modifications, by calling SetProperty()
...
base.BindProperty(controllerContext, bindingContext, propertyDescriptor);
}
}
Теперь, если это это то, что вы хотите применить ко всем десятичным знакам, вы также можете проверить полную реализацию Фила Хаака при обработке десятичных знаков с использованием специального связующего:
http://haacked.com/archive/2011/03/19/fixing-binding-to-decimals.aspx/
согласился. Будем очень благодарны, если хотите, можете немного поучить. То, что вы говорите, это Model, я должен изменить свойство и вернуть свойство, а не полную модель. Прежде чем я попробовал это раньше. Необходимо изменить только десятичное свойство. Проблема: К сожалению, в Global.asax у меня уже есть клиентское связующее с десятичной запятой. Я попробовал: ModelBinders.Binders.Add (типof (десятичный), новый CurrencyModelBinder()); ModelBinders.Binders.Add (типof (десятичный), новый TxTransactionModelBinder()); но был ошибкой "Элемент с тем же ключом уже добавлен." – Toubi
См. Это для получения более подробной информации http://stackoverflow.com/questions/21717757/cant-add-new-custom-model-binder-error-an-item-with-the-same-key-has- уже -b? noredirect = 1 # comment32841219_21717757 – Toubi
это означает, что в global.asax я могу зарегистрировать 2 пользовательских привязки модели одного и того же типаof (в этом случае typeof (десятичный))? Я ценю ваш подход, но просто хочу спросить, не возможно ? Как вы будете делать, если вам нужно делать из global.asax? – Toubi