mvcテンプレートとジェネリックに関していくつか質問がありましたが、私が探しているものとは関係がないようです。次のモデルを検討してください。
namespace MyNamespace
{
public class ModelBase { /* Not important for example */ }
public class MyModel : ModelBase
{
public string Name { get; set; }
}
public class MyViewModel
{
public IEnumerable<ModelBase> Data { get; set; }
}
}
そしてコントローラー:
public class HomeController : Controller
{
public ActionResult Index
{
return View(new MyViewModel { Data = new List<MyModel>() })
}
}
RazorビューViews/Home/Index.cshtmlは次のようになります。
@model MyNamespace.MyViewModel
@Html.EditorFor(m => m.Data)
特別なことは何もありません。そのためのディスプレイまたはエディターテンプレートが必要な場合は、Views / Shared/EditorTemplateまたはViews/Home / EditorTemplatesの下にMyModel.cshtmlというファイルを作成すると、正しく検出されます。
リストを表示するときにModelBaseの実装ごとに異なることをしたい場合はどうすればよいですか?Mvcビューファインダーは、上記のパスのいずれかでList'1.cshtmlテンプレートを正しく検出します。しかし、私がする必要があるのは、List`1[MyModel].cshtmlのテンプレートを作成することです。
正しいファイル名を取得できないようです。私がこれまでに試したこと(この例の命名と比較して):
- List`1 [MyModel] .cshtml
- List`1[[MyModel]]。cshtml
- List`1 [MyNamespace.MyModel] .cshtml
- List`1[[MyNamespace.MyModel]]。cshtml
可能であれば、カスタムビューファインダーを作成することは避けたいと思います。上記のものを機能させることができない場合に私が今考えることができる唯一の選択肢は、List`1.cshtmlにListから推測された名前でパーシャルを呼び出させることです。