0

私が単純なモデルを持っているとしましょう:

public Vehicle {
    public int year;
}

そして、そこから拡張された別のモデルがあります。

public Car : Vehicle {
    public string make;
}

年を設定できる Vehicle 用の EditorTemplate があります。Views/Shared/EditorTemplates に保存されます。

@model Vehicle
Year: @Html.EditorFor(m => m.year)

Vehicle の EditorTemplate を呼び出す Car の EditorTemplate を作成したいのですが、make を設定する機能も追加します。Vehicle にさらにプロパティを追加する場合は、Vehicle エディタ テンプレートを変更するだけで済みます。My Car エディターのテンプレートを変更する必要はありません。

私はこのようなものがうまくいくと思っていたでしょう:

@model Car
@Html.EditorForModel("Vehicle")
Make: @Html.EditorFor(m => m.make)

...しかし、何らかの理由で、そうではありません。私の見解は次のように単純です。

@model Vehicle
@Html.EditorForModel()

そのビューは、Car モデルを渡すと Car テンプレートを呼び出すことになるので、うまくいきます。しかし、表示されるのは make のエディタだけです。年間何もありません。したがって、この行@Html.EditorForModel("Vehicle")は何もしていないように見えます。Vehicle EditorTemplate は呼び出されません。

何か案は?これらは両方とも /Views/Shared/EditorTemplates 内のエディター テンプレートであり、何か関係があるのでしょうか。試してみ@Html.EditorForModel("~/Views/Shared/EditorTemplates/Vehicle")て、.cshtml を追加しましたが、どちらも機能しませんでした。

4

1 に答える 1

0

少なくとも回避策があります。ビューを次のように変更しました。

@model Vehicle
@Html.EditorForModel("Vehicle")
@Html.EditorForModel()

そしてそれはうまくいきます。Vehicle EditorTemplate を呼び出し、次に Car EditorTemplate を呼び出します。これは、Vehicle/Car を使用するすべてのビューでそれを行う必要があることを意味するため、理想的ではありません。しかし、少なくともそれは機能します。

しかし、なぜ別の EditorTemplate から EditorTemplate を呼び出せないのでしょうか? 私にはバグのように感じます...

于 2012-07-25T13:27:55.133 に答える