2016-12-28 44 views
1

我需要從某個動作屬性獲取視圖文本(不是呈現html)。如何從行動屬性獲取視圖文本

例如:

View (someview) text : Hello @Name @Surname 

[ActionFilter] 
public SomeViewAction() 
{ 
    return View(someview,someModel); 
} 

public class ActionFilter : IResultFilter 
{ 
    public void OnResultExecuting(ResultExecutedContext filterContext) 
    { 
     //here I need get text "Hello @Name @Surname" 
    } 
} 

回答

0

如果你有一個動作過濾器是這樣的:

public class ActionFilterAttribute : FilterAttribute, IResultFilter 
{ 
    public string ViewName { get; set; } 

    public void OnResultExecuted(ResultExecutedContext filterContext) 
    { 
     //throw new NotImplementedException(); 
    } 

    public void OnResultExecuting(ResultExecutingContext filterContext) 
    { 
     var viewResult = filterContext.Result as ViewResult; 
     if(viewResult != null) 
     { 
      var viewName = string.IsNullOrEmpty(ViewName) ? (string.IsNullOrEmpty(viewResult.ViewName) ? filterContext.Controller.ControllerContext.RouteData.Values["action"].ToString() : viewResult.ViewName) : ViewName; 
      if(!string.IsNullOrEmpty(viewName)) 
      { 
       var viewEngine = ViewEngines.Engines.FindPartialView(filterContext.Controller.ControllerContext, viewName); 
       var razorView = viewEngine.View as RazorView; 
       if (razorView != null) 
       { 
        using (var reader = new StreamReader(filterContext.HttpContext.Server.MapPath(razorView.ViewPath))) 
        { 
         var markups = reader.ReadToEnd(); 
        } 
       } 
      } 
     } 
    } 
} 

你將能夠適用於控制器動作過濾器:

[ActionFilter] 
    public ActionResult SomeView() 
    { 
     //var someview = "SomeView"; 
     var somemodel = default(object); 
     return View(somemodel); 
    } 
+0

此代碼拋出異常,因爲viewResult.ViewName =「」我認爲 – cosset

+0

你用上面的控制器動作測試過嗎?我測試過,沒有例外。 –

+0

上面的代碼是僞代碼,但是如果我們返回視圖(模型),而不是指向視圖名稱,那麼exceprion就會出現在 – cosset