Хотя решение Чарлино является умным и будет работать, лично мне не хотелось бы, чтобы идея «испачкала» мои доменные сущности дополнительным свойством только для этой цели. Я думаю, что у вас уже есть ответ: пользовательское связующее. Что-то вроде:
public class S2kBoolAttribute : CustomModelBinderAttribute, IModelBinder
{
public override IModelBinder GetBinder()
{
return this;
}
public object BindModel( ControllerContext controllerContext, ModelBindingContext bindingContext )
{
ValueProviderResult result;
return bindingContext.ValueProvider.TryGetValue( bindingContext.ModelName, out result )
? (S2kBool)result.ConvertTo( typeof( bool ) )
: null;
}
}
И тогда вы можете изменить действие вашего контроллера так:
public ActionResult Foo( [S2kBool]S2kBool myProperty ){
myClassInstance.MyProperty = myProperty;
SaveToLegacyDb(myClassInstance);
return RedirectToAction("Bar");
}
Если вы добавите немного больше работы в связыватель моделей, вы сможете заставить его работать с глобально зарегистрированным связывателем - но реализация, которую я дал вам выше, должна работать для выбора значений вишни, когда это необходимо.