我有一个看起来像这样的视图模型:
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,即使它在传递给视图之前已经在控制器中填充。
答案 0 :(得分:0)
<%=Html.DropDownListFor(m => m.Category , Model.CategoryList ) %>
如果您的模型为null,那么对Model.CategoryList的调用将不起作用。您可以使用静态函数。