2012-06-28 32 views
0

我想用這樣的自定義視圖引擎來處理HTML:確定MVC3的RenderView的背景下

protected override void RenderView(ViewContext viewContext, TextWriter writer, object instance) 
{ 
    if (viewContext.Controller is MyController) 
    { 
     .. alter the html then write to writer 
    } else { 
     base.RenderView(viewContext, writer, instance); 
    } 
} 

RenderView獲得呼籲的觀點和各部分觀點,但我想不出一個可靠的方法以確定它是渲染外部視圖還是部分視圖。

writer對象的類型是HttpWriter的部分視圖和StringWriter的外部視圖。這似乎是一種不好的方式來測試它,但到目前爲止,這是唯一具體的東西,我可以找到

instance告訴我視圖或部分視圖的名稱,但檢查字符串,看看我是否呈現部分視圖或者看起來不脆。

是否有更直接的方法來確定它是否是局部視圖?

回答

0

您可以從您的自定義視圖引擎傳遞一個布爾參數,以自定義視圖:

public class MyRazorView : RazorView 
{ 
    private readonly bool _isPartial; 

    public MyRazorView(ControllerContext controllerContext, string viewPath, string layoutPath, bool runViewStartPages, IEnumerable<string> viewStartFileExtensions, IViewPageActivator viewPageActivator, bool isPartial) 
     : base(controllerContext, viewPath, layoutPath, runViewStartPages, viewStartFileExtensions, viewPageActivator) 
    { 
     _isPartial = isPartial; 
    } 

    protected override void RenderView(ViewContext viewContext, TextWriter writer, object instance) 
    { 
     if (viewContext.Controller is MyController) 
     { 
      if (_isPartial) 
      { 
       // it's a partial 
      } 
      else 
      { 
       // it's the main view 
      } 
     } 
     base.RenderView(viewContext, writer, instance); 
    } 
} 

public class MyRazorViewEngine : RazorViewEngine 
{ 
    protected override IView CreatePartialView(ControllerContext controllerContext, string partialPath) 
    { 
     return new MyRazorView(
      controllerContext, 
      partialPath, 
      null, 
      false, 
      base.FileExtensions, 
      base.ViewPageActivator, 
      true 
     ); 
    } 

    protected override IView CreateView(ControllerContext controllerContext, string viewPath, string masterPath) 
    { 
     return new MyRazorView(
      controllerContext, 
      viewPath, 
      masterPath, 
      true, 
      base.FileExtensions, 
      base.ViewPageActivator, 
      false 
     ); 
    } 
} 
+0

簡單和輝煌。我一直在Constroller中進行計數,看看它是否是第一次調用(我正在對自定義控制器進行回調),但它看起來很不穩定。這好多了。 –