2010-07-08 10 views
0

Je ne suis pas fainéant, mais j'ai déjà 2 jours de retard sur notre sprint actuel dans mon premier projet MVC, donc j'ai utilisé l'assistant Ajouter vue pour générer Les vues fortement typées, mais maintenant que j'ai commencé à utiliser des classes ViewData comme modèles de vue, l'assistant génère des champs pour ViewDataBase, et pas mes ViewData dérivées.Génération de code pour les vues interrompues lors de l'utilisation de classes MVC ViewData personnalisées

Je pense que le ViewData dérivé est construit par une usine à l'exécution, et suppose que c'est pourquoi le concepteur/assistant ne peut me donner que les propriétés de la classe de base, mais y at-il quelque chose que je puisse faire?

+0

Juste pour vous assurer que je comprends, vous avez une classe appelée ViewDataBase et une classe concrète, par exemple, la classe CustomerViewData: ViewDataBase. Lorsque vous utilisez l'Assistant pour créer une vue fortement typée à l'aide de CustomerViewData, il en crée un en utilisant ViewDataBase? –

+1

Avez-vous recompilé avant d'utiliser Ajouter une vue? La vue est créée en fonction du dernier assemblage compilé, * pas * votre code source. –

+0

@Raj, c'est correct. – ProfK

Répondre

1

ProfK,

Voici ce que j'ai essayé (VS 2010, MVC2):

public class ViewDataBase 
{ 
    public int ID { get; set; } 
    public string Name { get; set; } 
} 

public class CustomerViewData : ViewDataBase 
{ 
    public string Address { get; set; } 
} 

faites un clic droit sur mon action et a créé un fortement typé Détails vue à l'aide CustomerViewData. Ce qui suit est généré:

<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<MyApplication.Models.CustomerViewData>" %> 

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

    <html xmlns="http://www.w3.org/1999/xhtml" > 
    <head runat="server"> 
     <title>Index</title> 
    </head> 
    <body> 
     <fieldset> 
      <legend>Fields</legend> 

      <div class="display-label">Address</div> 
      <div class="display-field"><%: Model.Address %></div> 

      <div class="display-label">ID</div> 
      <div class="display-field"><%: Model.ID %></div> 

      <div class="display-label">Name</div> 
      <div class="display-field"><%: Model.Name %></div> 

     </fieldset> 
     <p> 
      <%: Html.ActionLink("Edit", "Edit", new { /* id=Model.PrimaryKey */ }) %> | 
      <%: Html.ActionLink("Back to List", "Index") %> 
     </p> 

    </body> 
    </html>