1

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

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 的强类型

我的控制器正在使用数据库中的数据填充 CategoryList 属性。

我无法获取 DropDownListFor 模板来呈现包含 CategoryList 数据的下拉列表。我知道 CategoryList 在控制器中填充了数据,因为我在调试和单步执行控制器时看到了数据。

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

“/”应用程序中的服务器错误。你调用的对象是空的。说明:执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。

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

源错误:

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

源文件:c:\ProjectStore\AutoForm\AutoForm\Views\Shared\EditorTemplates\DropDownList.ascx 行:4

有任何想法吗?

谢谢

汤姆


作为后续,当我单步执行 EditorTemplate 中的代码时,我注意到 ViewData.Model 为空。我将 EditorTemplate 强类型化为“ProductViewModel”,这也是传递给控制器​​中视图的类型。我对为什么 ViewData.Model 为空感到困惑,即使它在传递给视图之前已在控制器中填充。

4

1 回答 1

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

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

于 2011-03-19T18:54:09.800 回答