ASP.Net MVC 2 DropDownListFor in EditorTemplate
- by tschreck
I have a view model that looks like this:
namespace AutoForm.Models
{
public class ProductViewModel
{
[UIHint("DropDownList")]
public String Category { get; set; }
[ScaffoldColumn(false)]
public IEnumerable<SelectListItem> CategoryList { get; set; }
...
}
}
It has Category and CategoryList properties. The CategoryList is the source data for the Category dropdown UI element.
I have an EditorTemplate that looks like this:
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<ProductViewModel>" %>
<%@ Import Namespace="AutoForm.Models"%>
<%=Html.DropDownListFor(m => m.Category , Model.CategoryList ) %>
NOTE: this EditorTemplate is strongly typed to ProductViewModel
My Controller is populating CategoryList property with data from a database.
I cannot get the DropDownListFor template to render a drop down list with data from CategoryList. I know CategoryList is getting populated with data in the controller because I see the data when I debug and step through the controller.
Here's my error message in the browser:
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
Any ideas?
Thanks
Tom
As a followup, I noticed that ViewData.Model is null when I'm stepping through the code in the EditorTemplate. I have the EditorTemplate strongly typed to "ProductViewModel" which is also the type that's passed to the View in the controller. I'm perplexed as to why ViewData.Model is null even though it's getting populated in the controller before getting passed to the view.