2010-08-27 3 views
2

i ce modèle sur mvc:problèmes de MVC2 lors de modifier un élément sur un textboxfor

public class User 
{ 
    public string Name 
    { 
     get; 
     set; 
    } 
    public IList<string>RelatedTags 
    { 
     get; 
     set; 
    } 
} 

Et pour modifier un ajouter un utilisateur comme suit tapé vue (utilisateur) (vue AddEdit.aspx):

<div> 
    <%: Html.LabelFor(e => e.Name)%> 
    <%: Html.TextBoxFor(e => e.Name)%> 
    <%: Html.ValidationMessageFor(e => e.Name)%> 
</div> 
<div> 
    <%: Html.LabelFor(e => e.RelatedTags)%> 
    <%: Html.TextBoxFor(e => e.RelatedTags)%> 
    <%: Html.ValidationMessageFor(e => e.RelatedTags)%> 
</div> 

D'autre part j'ai un champ "RelatedTags". J'avais besoin (du côté du contrôleur d'action) d'une liste d'étiquettes liées à l'utilisateur que j'ajoute. Pour cette raison, j'ai créé un liant modèle personnalisé (pour prendre la chaîne de la zone de texte et de le transmettre sous forme de liste):

public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) 
{ 
    List<string> listoftags = bindingContext.ValueProvider.GetValue("RelatedTags").AttemptedValue.Split(',').ToList<string>(); 
    return listoftags; 
} 

En fait, je peux utiliser le AddEdit.aspx pour ajouter un nouvel utilisateur (sur le côté du contrôleur im obtenir une liste des balises connexes, mais quand je modifier un utilisateur je ne sais pas où je peux convertir cette liste en chaîne par des virgules, et soit je ne sais pas devrait changer ces lignes dans la vue:

<div> 
     <%: Html.LabelFor(e => e.RelatedTags)%> 
     <%: Html.TextBoxFor(e => e.RelatedTags)%> 
     <%: Html.ValidationMessageFor(e => e.RelatedTags)%> 
</div> 

au moment, juste dans le cas, j'ai créé une méthode d'extension pour le IList:

public static class Extensions 
    { 
     public static string ToCommaString<T>(this IList<T> input) 
     { 
      StringBuilder sb = new StringBuilder(); 
      foreach (T value in input) 
      { 
       sb.Append(value); 
       sb.Append(","); 
      } 
      return sb.ToString(); 
     } 
    } 

Pourriez-vous me donner de l'aide pour quand je suis en train d'éditer un utilisateur, voyez dans le champ de saisie une chaîne séparée par des virgules avec tous les éléments de la liste?

Merci beaucoup d'avance.

Cordialement.

Jose.

Répondre

1

Peut-être pourriez-vous utiliser ce modèle?

public class UserModel 
{ 
    public string Name { get; set; } 
    protected IList<string> RelatedTagsList { get; set; } 
    public string RelatedTags 
    { 
     get 
     { 
      return string.Join(",", RelatedTagsList.ToArray()); 
     } 

     set 
     { 
      RelatedTagsList = value.Split(',').ToList(); 
     } 
    } 
} 

Aucun agent de liaison et aucune méthode d'extension requis.

+0

Merci beaucoup! Cordialement. Jose – Sosi