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:ProjectStoreAutoFormAutoFormViewsSharedEditorTemplatesDropDownList.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.