Параметр действия имеет значение по умолчанию?

Как я могу узнать в пользовательском ModelBinder в ASP.NET MVC, привязываю ли я к параметру, который имеет значение по умолчанию или нет?

Значение по умолчанию:

public void Show(Ship ship = null)
{
     // ...
}

Нет значения по умолчанию:

public void Show(Ship ship)
{
     // ...
}

ModelBinder:

public class ModelBinder : DefaultModelBinder
{
    public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
    {
        var modelType = bindingContext.ModelType;

        // Is it an item from the database?
        if (typeof(IDbObject).IsAssignableFrom(modelType))
        {
            // Get from database...
            var result = BindValue();

            if (result == null && NotOptional()) // Code for NotOptional needed
                throw new Exception();

            return result;
        }
    }
}

Я хочу знать это, потому что я хочу показать сообщение об ошибке, если пользователь выполняет запрос к действию и не предоставляет всю необходимую информацию (это будут все параметры, которые не имеют значения по умолчанию).

2 ответа

Решение

Если я правильно понимаю, вы можете запросить, украшен ли параметр OptionalAttribute

var method = typeof(YourClassName).GetMethod("Show");
foreach (var pi in method.GetParameters())
{
    var optionalAttribute = pi.GetCustomAttributes<OptionalAttribute>().FirstOrDefault();
    if (optionalAttribute != null)
    {
        //This is optional parameter
        object defaultValue = pi.DefaultValue;
    }
}

Я не думаю, что существует какой-либо эффективный или разумный способ определить, имеет ли входной параметр метода значение по умолчанию. Если вы ищете способ убедиться, что входящие данные правильные, вам нужно связать поля формы представления с моделью и использовать ModelState.IsValid для проверки наличия данных во всех полях.

Отличное введение можно найти здесь: http://www.codeproject.com/Articles/710776/Introduction-to-ASP-NET-MVC-Model-Binding-An-Absol

Другие вопросы по тегам