3

一部のコードを再利用しようとしていますが、MVCを使用する場合は、部分ビューがこれを行うための最良の方法のようです。

IEnumerableから継承する部分ビュー(以下を参照)を作成しました。

@model IEnumerable<Models.facility>

<div class="display-field">
    @foreach (var facility in Model)
    {
        <li>
            @facility.name
        </li>
    }
</div>

このビューを埋め込むビューは、次のようになります。

<div class="display-field">
    <div> @{Html.RenderPartial("FacilityPartial");} </div>
</div>

だから今問題。

null参照エラーが発生し、Model変数がnullであることがわかります。

エラー:

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

誰かが私が正しいことをしているのかどうか、そしてそれがヌルであるという事実以外にどこが間違っているのかを私にアドバイスできますか?

4

3 に答える 3

3

Html.Partialを使用します。この例を考えてみましょう。

インデックスビュー(ホーム)

 @{
        ViewBag.Title = "Home Page";
        //Test model to be passed to the partial view
        var products = new List<Product> { new Product{ProductName="Test product 1", ProductId=1234}};
    }
@Html.Partial("_TestPV", products)

_TestPV(部分ビュー)

@model IEnumerable<Product>
<p>
    @Html.ActionLink("Create New", "Create")
</p>
<table>
    <tr>
        <th>
            ProductName
        </th>
    </tr>
@foreach (var item in Model) {
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.ProductName)
        </td>
    </tr>
}
</table>

出力:

ここに画像の説明を入力してください

于 2013-02-01T08:48:23.693 に答える
2

部分ビューにパラメーターを渡すのを忘れたため、null 参照です。次のようにする必要があります。

@{Html.RenderPartial("FacilityPartial", someIEnumerableVariableHere);} 
于 2013-02-01T08:58:28.703 に答える
0

呼び出すとき@{Html.RenderPartial("FacilityPartial");}に、部分ビューの名前を指定しましたが、モデルをパラメーターとして含めるのを忘れました。これが、ビューがレンダリングされているときに、ビューで次のように宣言したモデルにアクセスしようとしているため、null 参照エラーが発生する理由です。

@model IEnumerable<Models.facility>

呼び出し行を変更すると、@{Html.RenderPartial("FacilityPartial", model);}機能するはずです。ビューは、渡されたモデルを操作できるようになりました。


補足として、@Jobbert Enamno によって受け入れられた回答では、質問で使用したものと@Html.Partialは対照的に@Html.RenderPartial使用しています。これらの違いは、あなたやこの質問を見ている他の誰かを混乱させるかもしれません:

@Html.Partial レンダリングされたビューを として返すMvcHtmlStringため、必要に応じてこれを変数に格納できます。

@Html.RenderPartialvoid など何も返さないため、Responseストリームに直接出力されます。

パフォーマンスに関しては、一般的に後者を使用する方が適切です。詳細な回答については、この質問を参照してください。

于 2016-01-23T22:33:39.423 に答える