Расширение ASP.NET MVC 2 Model Binder для работы на 0, 1 логическое значение - PullRequest
9 голосов
/ 24 января 2011

Я заметил, что с ASP.NET MVC 2 связыватель модели не распознает «1» и «0» как true и false соответственно. Можно ли расширить связующее для модели глобально , чтобы распознать их и превратить в соответствующие логические значения?

Спасибо!

Ответы [ 2 ]

9 голосов
/ 24 января 2011

Что-то между строк должно делать работу:

public class BBinder : DefaultModelBinder
{
    public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
    {
        var value = bindingContext.ValueProvider.GetValue(bindingContext.ModelName);
        if (value != null)
        {
            if (value.AttemptedValue == "1")
            {
                return true;
            }
            else if (value.AttemptedValue == "0")
            {
                return false;
            }
        }
        return base.BindModel(controllerContext, bindingContext);
    }
}

и зарегистрируйтесь в Application_Start:

ModelBinders.Binders.Add(typeof(bool), new BBinder());
2 голосов
/ 24 января 2011

Проверить эту ссылку . Видимо работает в MVC2.

Вы можете сделать что-то вроде (не проверено):

public class BooleanModelBinder : IModelBinder {
    public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) {
        ValueProviderResult value = bindingContext.ValueProvider.GetValue(bindingContext.ModelName);
        // do checks here to parse boolean
        return (bool)value.AttemptedValue;
    }
}

Затем в global.asax при запуске приложения добавьте:

ModelBinders.Binders.Add(typeof(bool), new BooleanModelBinder());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...