1

_Newsという部分的なビューがあり、それ自体を呼び出すと期待どおりに機能します。

次のコードを使用して別のビューから呼び出すと、次のようになります。

<div>
  @html.Partial("_News");
</div>

このエラーがスローされます:

Object reference not set to an instance of an object

ビューのこのコード行で:

@foreach (var item in Model) {

ビューがモデルを参照している場所。これは、ビューがコントローラーからモデルを渡されていないことを意味しますが、その理由については困惑しています。

コントローラはNewsControllerと呼ばれ、コントローラにあります。ビューは_Newsと呼ばれ、共有ビューにあります。部分ビューを呼び出すビューは、デフォルトのホームページ/インデックスページです。

4

2 に答える 2

3

パーシャルがモデルのデータにアクセスする必要がある場合は、モデルをPartial()メソッドに渡す必要があります。

@Html.Partial("_News", Model)

MSDN: http: //msdn.microsoft.com/en-us/library/system.web.mvc.html.partialextensions.partial%28v=vs.108%29.aspx

編集:

以下のコメントによると、あなたは実際にこの後だと思います:http: //haacked.com/archive/2009/11/17/aspnetmvc2-render-action.aspx-これにより、コントローラーアクションを呼び出して結果をにレンダリングできます現在のビュー。

于 2012-12-21T07:07:19.073 に答える
2

部分モデルは、メイン ビューのモデルのサブセットまたはプロパティでしょうか? 私が言うことができると言うのは、Tieson のポイントでは、パーシャルが必要とするモデルとビューが必要とするモデルとの間のほとんどすべての不一致に対処できるためです...しかし、パーシャルが必要とするモデルがビューが必要とするモデルとはかけ離れている場合は、多くの場合、私の2つのモデルが完全に/正しく洗い流されていない可能性があると考えられます(基本的には、「同じページであまりにも多くのものや無関係なものを表現しようとしていますか?」).

さらに、パーシャルのモデルをメイン ビューのモデルのプロパティにして、次のようにモデルをパーシャルに渡すことができる場合:

@Html.Partial("_News", Model.SomePropertyThatFulfillsTheDataSourceOfThePartial)

フォームを送信する必要がある場合は、これによりモデルのバインドもはるかに簡単になります。

于 2012-12-21T07:28:26.637 に答える