私は次のようなビューモデルを持っています:
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がnullであることに気付きました。EditorTemplateを「ProductViewModel」に強く型付けしました。これはコントローラーのビューに渡される型でもあります。ビューに渡される前にコントローラーに入力されているのに、ViewData.Modelがnullである理由に戸惑っています。