2010-08-25 3 views
0

J'ai un Foo de classe avec un UpdateMe de champ de type Confirmation comme décrit ci-dessous ..ASP.NET MVC2 UpdateModel pas mettre à jour une propriété publique inclus dans la liste blanche

public class Foo 
{ 
    public Confirmation UpdateMe{get;set;} 
    public int BarInt{get;set} 
} 

public enum Confirmation 
{ 
    N = 0, 
    Y = 1 
} 

J'ai une liste blanche qui a UpdateMe, et fonctionne de la façon suivante ...

[AcceptVerbs(HttpVerbs.Post), ValidateAntiForgeryToken] 
public ActionResult Update(Foo foo) 
{ 
    if(ModelState.IsValid) 
    { 
    //this is the Foo as it exists in the backend..using Linq2Sql read/record behavior 
    Foo existingFoo = _Service.GetFoo(); 
    string[] whitelist = { "UpdateMe" }; 

    UpdateModel(existingFoo, whitelist); 

    //do persistence stuff down here... 

    } 
} 

le modèle est lié très bien, Foo entrant a toute valeur UpdateMe je mis, mais la procédure de mise à jour UpdateModel n'est pas la propriété.

Cela a été ridiculement simplifié, mais rassurez-vous, le UpdateModel fonctionne pour les autres propriétés qui passent par l'action.

Une idée de pourquoi cette propriété publique particulière ne se met pas à jour?

Répondre

0

Ok, voici le scoop.

Le problème est que le champ a été mappé à une case à cocher. Lorsque vous n'écriviez pas la case à l'aide d'un HtmlHelper, il ne se propageait pas dans ModelState et n'était donc pas inclus dans le UpdateModel. Lorsque j'ai basculé à l'aide d'un HtmlHelper, le ModelState incluait alors la valeur de case à cocher indépendamment d'être sélectionné (désiré) ... cependant, cela ramenait la laideur de mapper un type enum à une case à cocher.

Questions connexes