Параметр действия имеет значение по умолчанию?
Как я могу узнать в пользовательском 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