2011-11-04 2 views
0

Je dois effectuer une liaison tardive d'un type complexe avec DataAnnotations dans une action si la condition X est vraie. Je ne peux pas tout lier à l'avance dans les paramètres de la méthode car certains d'entre eux n'existeront que si X == true alors Model.IsValid sera faux (puisqu'il essaye de lier des params non existants) en raison de la validation échouant sur le type complexe.MonoRail BindObject() équivalent en ASP MVC3?

MonoRail a résolu cela en vous permettant de manually bind lorsque cela est nécessaire, c'est le scénario exact que je me suis demandé si quelque chose de similaire est disponible dans MVC3?

Je ne peux pas surcharger l'action lorsqu'elle explose avec un appel ambigu, je ne peux pas poster sur une action différente car le formulaire est tout le contenu dynamique, donc je vois la seule alternative est de rouler mon propre mécanisme de validation. annotations pour valider avec .... :(boooo

Répondre

1

Je pense que ce dont vous avez besoin est la méthode ControllerBase.TryUpdateModel (il a un bon nombre de surcharges) vous pouvez l'utiliser de la même comme BindObject.

Certains modèles:

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

    public string Description { get; set; } 
} 

Dans l'action du contrôleur:

[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(); 
} 
+0

Cela fait le travail bien, merci! – Tom