2014-02-13 23 views
2

我有一個ASP.net MVC項目,我承認我對MS實現MVC的方式不太感興趣,因此已經將項目剝離到最低限度。我沒有定義任何路線,而是在web.config中有一個DefaultDocument條目,該條目指向實現IHttpHandler的類。從IHttpHandler返回一個Razor(cshtml)頁面而不進行重定向

從我的IHttpHandler類,我想輸出一個Razor .cshtml文件,我不希望創建路由條目到cshtml文件,所以我不能簡單地將用戶重定向到.cshtml文件。我發現一些資源在討論PageParser.GetCompiledPageInstance,但這似乎是針對aspx文件而不是Razor View Engine。

那麼,從我的IHttpHandler類輸出一個.cshtml文件到HttpContext,我應該感興趣哪些類?

public class Main : IHttpHandler{ 
    public void ProcessRequest(HttpContext context){ 
     // 
    } 
} 

回答

5

看樣子我一直在尋找錯誤的事情 - 祕密一句話是:

渲染Razor視圖爲字符串

下面的代碼工作得很好這似乎:

public static string GetRazorViewAsString(object model, string filePath) 
{ 
    var st = new StringWriter(); 
    var context = new HttpContextWrapper(HttpContext.Current); 
    var routeData = new RouteData(); 
    var controllerContext = new ControllerContext(new RequestContext(context, routeData), new FakeController()); 
    var razor = new RazorView(controllerContext, filePath, null, false, null); 
    razor.Render(new ViewContext(controllerContext, razor, new ViewDataDictionary(model), new TempDataDictionary(), st), st); 
    return st.ToString(); 
} 

代碼從http://forums.asp.net/post/5333141.aspx

相關問題