EditorTemplate 中的 ASP.Net MVC 2 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 是类别下拉 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 正在填充控制器中的数据,因为我在调试并单步执行控制器时看到了数据。
这是我在浏览器中的错误消息:
“/”应用程序中的服务器错误。 对象引用未设置为 对象的实例。描述:安 期间发生未处理的异常 当前网络的执行 要求。请检查堆栈跟踪 有关错误的更多信息 以及它在代码中的起源。
异常详细信息: System.NullReferenceException:对象 未设置对实例的引用 对象。
来源错误:
第 2 行:<%@ 导入 命名空间=“AutoForm.Models”%>第 3 行: 第 4 行:<%=Html.DropDownListFor(m =>; m.Category, Model.CategoryList) %>
源文件: c:\ProjectStore\AutoForm\AutoForm\Views\Shared\EditorTemplates\DropDownList.ascx 行数:4
有什么想法吗?
谢谢
Tom
作为后续工作,当我单步执行 EditorTemplate 中的代码时,我注意到 ViewData.Model 为 null。我将 EditorTemplate 强类型化为“ProductViewModel”,这也是传递给控制器中视图的类型。我很困惑为什么 ViewData.Model 为 null,即使它在传递到视图之前已填充到控制器中。
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:\ProjectStore\AutoForm\AutoForm\Views\Shared\EditorTemplates\DropDownList.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.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
如果您的模型为 null,则对 Model.CategoryList 的调用将不起作用。您可以改用静态函数。
If your model is null then that call to Model.CategoryList will not work. You can use a static function instead.