2010-02-21 4 views
1

Il semble qu'il ne soit plus possible de modifier un objet personnalisé après ma mise à niveau vers asp.net mvc 2 rc 2? J'utiliser cette approche http://bradwilson.typepad.com/blog/2009/10/aspnet-mvc-2-templates-part-4-custom-object-templates.html avec un objet personnalisé comme celui-ci:Html.EditorFor ne rend rien si j'utilise un objet personnalisé?

Mon modèle a juste une propriété, mais hérite d'une classe de base abstraite public class Page: ContentItem { [DataType (DataType.MultilineText)] de chaîne publique virtuelle MainIntro { se mettre; } // Cette propriété rend correcte

[DisplayFormat(NullDisplayText="(null value)")] 
    public virtual DetailCollection Tags { get; set; } 

}

Mon contrôleur ressemble à ceci

public ActionResult Edit(string pagePath) { 
     var page = _repository.GetByUrlSegment(pagePath); 
     return View(page.EditViewName, new DashboardModel(page, RootPages)); 
    } 

Et moi ressemble à ce

<% using (Html.BeginForm("update","Dashboard", FormMethod.Post, new { name = "editForm" })) %> 
<% { %> 
    <div> 
     <%=Html.EditorFor(model => model.CurrentItem) %> 
     <div class="editor-button"> 
      <input type="submit" value="Save" /> 
     </div> 
    </div>    
<% } %> 
+0

Pouvez-vous poster un peu plus de code ... comme le blog que vous êtes quorint n'utilise pas EditorFor. – AxelEckenberger

+0

Donc, j'ai maintenant mis à jour ma question avec un peu plus de code – Marcus

+0

Il semble que c'est comme ça que ça fonctionne. Je l'ai trouvé dans le blog de Scott Guthries Les nouvelles méthodes d'aide basées sur des modèles Html.EditorFor() et Html.DisplayFor() permettent maintenant d'auto-échafauder les propriétés simples (et ne rendent pas les sous-propriétés complexes par défaut). Alors, comment puis-je activer cette fonctionnalité à nouveau? – Marcus

Répondre

1

Peut-être qu'il serait préférable de l'exposer à la vue sous la forme d'une chaîne séparée par des espaces et exclure la collection de l'affichage dans la vue. Vous pouvez également définir un modèle spécifique pour l'affichage d'une collection. Ce n'est pas clair pour moi comment MVC serait capable de déterminer ce qu'il faut afficher autrement.

Essayez quelque chose comme:

 [ShowForDisplay(false)] 
     [ShowForEdit(false)] 
     public virtual DetailCollection Tags { get; set; } 

     public virtual string TagList 
     { 
      get 
      { 
       if (tags == null) return "(null value)"; 

       // assumes DetailCollection implements IEnumerable<string> 
       return string.Join(" ", tags.Select(t => t).ToArray()); 
      } 
      set 
      { 
        tags = new DetailCollection(value.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries) 
                .Select(s => s.Trim())); 
      } 
     } 
+0

Je pensais utiliser l'attribut UIHint pour spécifier quel modèle utiliser. – Marcus