2010-04-22 24 views
1

J'ai un modèle de vue qui ressemble à ceci:ASP.Net MVC 2 DropDownListFor dans EditorTemplate

namespace AutoForm.Models 
{ 
    public class ProductViewModel 
    { 
     [UIHint("DropDownList")] 
     public String Category { get; set; } 

     [ScaffoldColumn(false)] 
     public IEnumerable<SelectListItem> CategoryList { get; set; } 

     ... 
    } 
} 

Il a Catégorie et propriétés CatégorieListe. CategoryList est la source de l'élément d'interface utilisateur de la liste déroulante Catégorie.

J'ai un EditorTemplate qui ressemble à ceci:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<ProductViewModel>" %> 
<%@ Import Namespace="AutoForm.Models"%> 

<%=Html.DropDownListFor(m => m.Category , Model.CategoryList) %> 

NOTE: ce EditorTemplate est fortement typé à ProductViewModel

Mon contrôleur est peuplait propriété CatégorieListe avec les données d'une base de données.

Je n'arrive pas à obtenir le modèle DropDownListFor pour afficher une liste déroulante avec des données de CategoryList. Je sais que CategoryList est rempli avec des données dans le contrôleur parce que je vois les données lorsque je débogue et passe par le contrôleur.

Voici mon message d'erreur dans le navigateur:

Server Error in '/' Application. Object reference not set to an instance of an object. Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.

Source Error:

Line 2: <%@ Import Namespace="AutoForm.Models"%> Line 3: Line 4: <%=Html.DropDownListFor(m => m.Category, Model.CategoryList) %>

Source File: c:\ProjectStore\AutoForm\AutoForm\Views\Shared\EditorTemplates\DropDownList.ascx Line: 4

Toutes les idées?

Merci

Tom


En tant que suivi, je remarque que ViewData.Model est nulle quand je suis pas à pas dans le code dans le EditorTemplate. J'ai le EditorTemplate fortement typé à "ProductViewModel" qui est aussi le type qui est passé à la vue dans le contrôleur. Je suis perplexe quant à la raison pour laquelle ViewData.Model est null même s'il est rempli dans le contrôleur avant d'être passé à la vue.

+0

Si vous avez cloué sur un modèle nul que vous croyez être rempli dans le contrôleur, l'affichage du code du contrôleur permettrait aux gens de vous aider à déterminer pourquoi. – patridge

+0

Quelle est votre utilisation dans la vue qui devrait finir par appeler le modèle d'éditeur? –

Répondre

0
<%=Html.DropDownListFor(m => m.Category , Model.CategoryList) %> 

Si votre modèle est null alors cet appel à Model.CategoryList ne fonctionnera pas. Vous pouvez utiliser une fonction statique à la place.