我有一个看起来像这样的视图模型:
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 为空感到困惑,即使它在传递给视图之前已在控制器中填充。