少なくとも、私は問題に関連していると思います。私のシナリオは次のとおりです。EditorForは派生型では機能しません
私は共通のフィールドを持ついくつかのビジネスエンティティを持っており、それぞれにそのエンティティに固有のカスタムフィールドがあります。したがって、コードでは、これはEntityBase
クラスとしてモデル化されており、これに由来するクラスはいくつかあります(例:Derived
)。
@ModelType EntityBase
@Using Html.BeginForm("Edit", Model.GetType.Name)
@* show the editor template for the derived type *@
@* !!the next line renders nothing!! *@
@Html.EditorFor(Function(x) Model, Model.GetType.Name)
[show a bunch of stuff common to all EntityBase objects]
End Using
、その後1本ない派生クラスのDerived.vbhtml
呼ば:
@ModelType Derived
[show an EditorFor for various Derived-specific fields]
を
は、再利用可能なUIを作るために、私はこのようになりますEntityBase.vbhtml
というビューを持っています次に、
\Derived\Edit\123
に移動すると、既定のビュー
Derived\Edit.vbhtml
が返されます。
@Html.EditorForModel("EntityBase")
このように、コントローラーは、EntityBase
ビューへの1回限りの呼び出しであるデフォルトの編集ビューを返します。これは、そのことを行い、知識のない派生クラスのものをレンダリングするためにDerived
を呼び出します。
私はこれが目立たないと思ったが、うまくいかなかった。ビューコードでマークされているように、基本クラスビュー内でEditorForModelを呼び出し、派生クラスの名前をテンプレートとして指定すると、何も描画されません。私は、トップレベルの編集テンプレートでこのまったく同じコード行を呼び出すと、うまく動作することをテストしました。だから、MVCが好まない継承について何かがありますが、私は何が見えません。助けてください!
更新:代わりにEditorFor
の私はPartial
を使用(およびEditorTemplatesフォルダから共有フォルダに対応するテンプレートを移動する)場合、私は期待通りに動作しますが、私はそれがない混乱だと思うので、それは素晴らしい解決策ではありませんEditorForテンプレートの命名規則に従ってください。
同じ問題が発生しました。素晴らしい回避策をありがとう。私はちょうどあきらめようとしていた: –
それを聞いてうれしい!私は本当にこの髪を切り裂きました。 –