У меня есть метод действия, который принимает несколько необязательных параметров.
Этот метод действия ASP.NET MVC выглядит достаточно простым, но не работает так, как я хочу ....
[HttpPost]
public ActionResult UpdateOrder(OrderItem OrderItem, Address ShippingAddress)
{
if (ShippingAddress != null) {
// we have a shipping address
}
}
Address
объект всегда создается для ShippingAddress
, потому что - хорошо - так работает механизм связывания моделей.Даже если в форме отсутствуют поля ShippingAddress.Address1
, ShippingAddress.City
и т. Д., Объект все равно будет создан и передан действию.
Мне нужен способ создания связывателя модели, который возвращает ноль для моделиесли он считается пустым.
Первая попытка выглядит следующим образом
protected override void OnModelUpdated(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
base.OnModelUpdated(controllerContext, bindingContext);
// get the address to validate
var address = (Address)bindingContext.Model;
// if the address is quintessentially null then return null for the model binder
if (address.Address1 == null && address.CountryCode == null && address.City == null)
{
bindingContext.Model = null;
}
}
К сожалению, это простое решение не работает, и я получаю следующую ошибку:
InvalidOperationException -Этот установщик свойства устарел, потому что его значение теперь является производным от ModelMetadata.Model.
Есть ли способ, которым я могу сделать полную 'Model' из пользовательского ModelBinder, чтобы вернуть нуль