SignalR については何も知りませんが、null オブジェクトのプロパティの HTML をレンダリングしようとするビューに問題があると確信しています。
記事をざっと読んだところ、データを格納する実際のデータベースへの参照が見られず、コードからデータベースを生成するためのコードが提供されていませんでした (また、投稿の作成者は、既存のデータベースに接続するかどうかについて明確ではありません)または生成します)。
コードを既存のデータベースにマッピングする例については、こちらを参照してください。
既存のデータベースがない場合は、Entity Framework コードにデータベースを生成するように指示する必要があります。この記事では、その方法を説明します(必要なものは記事の下部にあります)。
ここで、エンティティ クラスを設定した方法を見て、2 つの記事で説明したことをまだ行っていないと仮定すると、Entity Framework は自動的にデータベースを作成するはずです (これは既定の動作です - よくわかりません)。ただし、SQL Server Express 以降がインストールされていない場合はどうなりますか)。SQL サーバー インスタンスにデータベースがあるかどうかを確認しましたか? これはBlogPostContextと呼ばれる必要があります。これにいくつかのデータを入力すると、動作するはずです。
では、なぜこの問題が発生するのでしょうか。現時点では、あなたはどちらかを持っています
- データベースなし、または
- データのないデータベース。
これは、コントローラーが次のいずれかであることを意味します
- 存在しないものからデータをリクエストする、または
- 空のデータベースからのデータのリクエスト
両方のシナリオから返される結果は、null オブジェクトです。この null オブジェクトはビューに渡され、ビューは null オブジェクトを反復処理して例外を生成しようとします。
これは 2 つの方法で確認できます。
- ビューで null オブジェクトを確認し、null チェックが false を返す場合は、モデルに基づいて HTML のみを出力します。
- コントローラーのデータベース取得ロジックを、ダミーのブログ データを生成するコードに置き換え、代わりにこれをビューに渡します。
ソリューション 1 の場合、ビューでは次のようになります。
@if (Model == null)
{
<span>No data!</span>
}
@else
{
// All the auto generated view code goes here...
}
解決策 2 では、コントローラーのデータ取得コードを置き換える必要があります。したがって、このようなコードはすべて削除してください。
BlogPost blogPost = db.BlogPosts.Find(id)
このようなものに置き換えます。
BlogPost blog = new BlogPost()
{
Title = "Use Entity Framework Code-First";
Post = "blog post body goes here..."
};
IEnumerable<BlogPost> posts = new List<BlogPost>();
posts.Add(blog);
注: これら 2 つの解決策は、問題を説明するためのものであり、データベースを正しくセットアップしたら、データ取得コードの使用に戻る必要があります。