1

RSS フィードから受信したニュースのリストを部分的に表示したいと考えています。私は次のコントローラを持っています:

RssFeedPartial

public ActionResult HealthCareNews()
{
// get the news add them to a list.
return PartialView("_HealthCareNews",rssList);
}

この部分的なビューを About、News などのページに表示したいと考えています。

ホームコントローラー

public ActionResult About()
{
    return View();
}

ページについて

<div id="rightColumn">
@Html.Partial("_HealthCareNews")
 </div>

_HealthCareNewsページ

@model IEnumerable<MDISS.ViewModel.RSS>
@foreach(var item in Model)
{
//display list
}

Aboutページを開こうとすると、次のエラーが表示されます。

オブジェクト参照がオブジェクト インスタンスに設定されていません。

4

2 に答える 2

3

@Html.Partial("_HealthCareNews")部分ビューを直接レンダリングします。データを渡していないため、Modelプロパティは になりますnull。これによりObject reference not set to an instance of an objectエラーが発生します。

代わりHealthCareNewsに、コントローラーでアクションを呼び出します。これを行うには、次のようにHtml.Actionを使用します 。

@Html.Action("HealthCareNews") 

Html.Partialビューからデータを直接渡す場合、または部分ビューに静的データのみが含まれる場合は、部分ビューの直接レンダリング ( を使用) を使用できます。

部分ビューが、レンダリング元のビューのモデルの一部ではないデータに依存している場合は、 を使用できますHtml.Action。このようにして、コントローラーでアクション メソッドを実行します。アクション メソッドは、部分ビューに必要なモデルを構築できます。

アップデート

MVC のアクション メソッドはActionResult. 、 、など、MVC に存在するActionResultすべての異なるタイプの の抽象基本クラスです。一部の開発者は、すべてのメソッドの戻り値の型として ActionResult を使用することを好みます。他の人は、最も具体的な戻り値の型を宣言しようとします。私は後者を使用することを好みます。特に単体テストでは、結果を直接操作できるため、コードが使いやすくなります。ActionResultViewResultJsonResultPartialViewResult

との違いは、レイアウト ページの使用に関係していますViewResultPartialViewResultPartialView は、別のページに埋め込むことができる単一の HTML を返すために使用されるため、レイアウト ページを使用する必要はありません。AViewResultは、レイアウト ページを使用するためのオプションを含む完全なビューを返します。

于 2013-08-29T10:32:09.040 に答える