내 질문과 관련된 여러 게시물을 읽었지만 특정 문제를 해결하지 못했습니다.런타임 캐스팅
아래 클래스는 분석을 위해 Razor 엔진에 정보를 전달할 정보를 보유하고 있습니다.
public class ActionResult
{
public object ViewModel { get; set; }
public string View { get; set; }
}
ActionResult.ViewModel 속성은 내 의견이 강력하게 형식화 된대로 내보기 필요한 사용자 정의 유형이 될 수있는 뷰 모델 클래스의 인스턴스를 개최한다.
나는 면도기 엔진을 새로 시험 할 것이다.
var razorEngine = new RazorEngine(razorScriptFile, _moduleResult.ModuleContext, "");
후 내가 가진 문제는 내가이가 actionResult 인스턴스 내에서 정보를 사용하는 방법을 렌더링 호출하는 방법에 확실하지 오전 것입니다 ... 그것은 서명이있어,
public void Render<T>(TextWriter writer, T model){}
을 렌더링 메소드를 호출 런타임에 사용할 수 있습니다.
나는 방법은 호출 하드 코드가 잘 작동하면 ...
razorEngine.Render<MyViewModelType>(writer, actionResult.ViewModel);
는하지만 난 내가 MyViewModelType로 actionResult.ViewModel을 받고 일을하거나 그냥 MyViewModelType 캐스팅되어야 하는지를 같아요. 하지만 런타임에 Type을 제공하는 동안 razorEngine.Render() 메서드를 호출하는 방법을 모르겠습니다. 닷넷 4.5
편집을 ...
내가 내가 내가 할 수 있다고 생각하는 것 같다 ..
Type type = actionResult.ViewModel.GetType();
var model = actionResult.ViewModel as type;
하지만를 사용
이
리플렉션을 사용하거나 Object를 전달해야합니다. – SLaks
razorEngine.Render (writer, (MyViewModelType) actionResult.ViewModel)에 문제가 있습니까? 나는 어려움이 무엇인지 이해하지 못한다. – Asik
면도기 엔진에서 render 메서드를 호출 할 때 모델 매개 변수는 면도기 뷰에 입력 된 것과 동일한 유형이어야합니다. 내 단점은 런타임에 모델을 개체 형식에서 필요한 사용자 지정 형식 (MyViewModel)으로 캐스팅하는 것입니다. – JBeckton