1. ホーム
  2. asp.net-mvc

[解決済み】NULLモデルを持つrenderpartialは、間違った型を渡される

2022-04-13 15:09:51

質問

あるページがあります。

<%@ Page Inherits="System.Web.Mvc.View<DTOSearchResults>" %>

そしてその上に、以下のように。

<% Html.RenderPartial("TaskList", Model.Tasks); %>

ここにDTOオブジェクトがあります。

public class DTOSearchResults
{
    public string SearchTerm { get; set; }
    public IEnumerable<Task> Tasks { get; set; }

で、以下はパーシャルです。

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<IEnumerable<Task>>" %>

Model.TasksがNULLでない場合、すべて正常に動作します。しかし、それがNULLである場合、私は取得します。

辞書に渡されたモデル項目は、型が DTOSearchResults' ですが、このディクショナリーでは、型 'System.Collections.Generic.IEnumerable`1[Task]' です。

どのオーバーロードを使えばいいのかわからないのだろうと思い、明示的にこのようにしました(下記参照)。しかし、まだ同じ問題が発生しています

<% Html.RenderPartial("TaskList", (object)Model.Tasks, null); %>

NULLをチェックしたり、NULLを渡さないようにすることで回避できることは分かっているのですが、そういう問題ではありません。なぜこのようなことが起こるのでしょうか?

解決方法は?

Andrew あなたが得ている問題は、RenderPartial メソッドが、あなたが渡したモデルが null である場合に、呼び出し元の (view) のモデルを部分ビューに使用した結果であると思います。

<% Html.RenderPartial("TaskList", Model.Tasks, new ViewDataDictionary()); %>

役に立ちましたか?