MonoRail BindObject () эквивалентно в ASP MVC3? - PullRequest
0 голосов
/ 04 ноября 2011

Мне нужно выполнить позднее связывание сложного типа с DataAnnotations в Action, если условие X истинно. Я не могу связать все заранее в параметрах метода, так как некоторые из них не будут существовать, если только X == true, поэтому Model.IsValid будет иметь значение false (поскольку он пытался связать несуществующие параметры) из-за сбоя проверки правильности для сложного типа.

MonoRail решил эту проблему, позволив вам вручную связать при необходимости, это именно тот сценарий, который у меня есть, поэтому мне интересно, есть ли что-то подобное в MVC3?

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

1 Ответ

1 голос
/ 04 ноября 2011

Я думаю, что вам нужен метод ControllerBase.TryUpdateModel (он имеет много перегрузок).Вы можете использовать его так же, как BindObject:

Некоторые модели:

public class MyModel
{
    [Required]
    public string Name { get; set; }

    public string Description { get; set; }
}

В действии контроллера:

[HttpPost]
public ActionResult UpdateModel(bool? acceptedConditions)
{
    var model = new MyModel();
    if (acceptedConditions ?? false)
    {
         if (TryUpdateModel(model))
         {
             //Do something when the model is valid
         }
         else
         {
             //Do something else when the model is invalid
         }

    }   
    return View();
}
...