在EditorTemplate中的ASP.Net MVC 2 DropDownListFor

时间:2010-04-22 18:49:41

标签: asp.net-mvc-2 editortemplates html.dropdownlistfor

我有一个看起来像这样的视图模型:

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

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

        ...
    }
}

它具有Category和CategoryList属性。 CategoryList是Category下拉UI元素的源数据。

我有一个如下所示的EditorTemplate:

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

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

注意:此EditorTemplate强类型为ProductViewModel

My Controller使用数据库中的数据填充CategoryList属性。

我无法使DropDownListFor模板呈现包含CategoryList数据的下拉列表。我知道CategoryList会在控制器中填充数据,因为我在调试和逐步调试控制器时会看到数据。

这是浏览器中的错误消息:

  '/'应用程序中的服务器错误。   对象引用未设置为   对象的实例。描述:一个   未处理的异常发生在   当前网络的执行   请求。请查看堆栈跟踪   有关错误的更多信息   它起源于代码。

     

异常详细信息:   System.NullReferenceException:Object   引用未设置为的实例   对象

     

来源错误:

     

第2行:&lt;%@ Import   命名空间= “AutoForm.Models” %&GT;第3行:   第4行:&lt;%= Html.DropDownListFor(m =&gt;   m.Category,Model.CategoryList)%&gt;

     

源文件:   C:\ ProjectStore \自动窗体\自动窗体\视图\共享\ EditorTemplates \ DropDownList.ascx   行:4

有什么想法吗?

由于

汤姆


作为后续,我注意到当我逐步完成EditorTemplate中的代码时,ViewData.Model为null。我将EditorTemplate强类型化为“ProductViewModel”,它也是在控制器中传递给View的类型。我很困惑,为什么ViewData.Model为null,即使它在传递给视图之前已经在控制器中填充。

1 个答案:

答案 0 :(得分:0)

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

如果您的模型为null,那么对Model.CategoryList的调用将不起作用。您可以使用静态函数。