mvc 템플릿과 제네릭에 관한 몇 가지 질문이 있지만 찾고있는 것과 관련이없는 것 같습니다. 다음과 같은 모델을 고려MVC3 면도기 편집기/표시 템플릿 및 제네릭
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; }
}
}
그리고 컨트롤러 :이 특별
@model MyNamespace.MyViewModel
@Html.EditorFor(m => m.Data)
아무것도 :
public class HomeController : Controller
{
public ActionResult Index
{
return View(new MyViewModel { Data = new List<MyModel>() })
}
}
면도칼은 뷰를 볼 수/홈/Index.cshtml과 같을 것이다. 내가 뷰/공유/EditorTemplate 아래 또는 뷰/홈/EditorTemplates에서 MyModel.cshtml이라는 파일을 만들 수있는 디스플레이 또는 편집기 템플릿을 원한다면 올바르게 찾습니다.
목록을 표시 할 때 ModelBase의 각 구현에 대해 다른 작업을 수행하려면 어떻게해야합니까? Mvc 뷰 파인더는 위의 경로 중 하나에서 List'1.cshtml 템플릿을 올바르게 찾습니다. 그러나 내가해야 할 일은 List`1 [MyModel] .cshtml의 템플릿을 작성하는 것입니다.
올바른 파일 이름을 얻지 못하는 것 같습니다. 내가이 (이름이 예를 기준으로) 지금까지 시도했습니다.
이- List`1 [MyModel] .cshtml
- List`1 [[MyModel]
- List`1을 cshtml [MyNamespace에 .MyModel] .cshtml
- List`1 [[MyNamespace.MyModel]. cshtml 나는 사용자 정의 뷰 파인더를 작성 않도록하려면 가능하면
. 물건을 넘을 수 없다면 지금 생각할 수있는 유일한 대안은 List`1.cshtml을 List에서 추론 된 이름으로 부분 호출을하는 것입니다.
템플릿 List'.cshtml이 Views \ Home 내의 모든 목록을 처리하는 곳에서 빠르고 더러운 솔루션을 만들었습니다. 템플릿 이름을 일반 및 포함 된 형식에서 수동으로 컴파일하고 부분으로 호출하여 모델을 전달합니다. 자랑스럽지 않지만 내가 생각할 수있는 유일한 해결책. "올바른 길"을 환영한다는 제안. 그래서 나는 List' [MyModel] .cshtml과 비슷한 템플릿을 만들었습니다. –