2011-05-26 74 views
-2

如何將操作結果保存到asp.net MVC中的磁盤上的文件?如何將操作結果保存到文件?

public void Test() 
{ 
    var x = view(); 
    //save x as a file on disk 
} 
+1

你可能會詳細一點嗎?你到底想把什麼保存到磁盤? – tobias86 2011-05-26 07:21:52

+0

我知道怎麼做'ViewResult'。如果你需要這樣的東西,我可以給你一個樣品。 – 2011-05-26 07:24:50

+0

你好?你還活着嗎?社區越來越擔心,你問了一個問題,收到了兩條評論和一個答案,而你沒有迴應。我們應該派出一個搜索派對嗎? – 2011-05-31 22:08:41

回答

1

此方法(作爲控制器類型添加爲方法)將定位並激發視圖並將視圖結果作爲字符串返回。

然後,您可以取出字符串並按照您的要求進行操作。

我將它用於電子郵件模板。

protected string ViewContent(string view, 
    string controller, ViewDataDictionary viewData) 
{ 
    var routeData = new System.Web.Routing.RouteData(
    RouteData.Route, RouteData.RouteHandler); 
    foreach (var item in RouteData.Values) 
    { 
    routeData.Values.Add(item.Key, item.Value); 
    } 
    //then overwrite the controller - not the action, though 
    routeData.Values["controller"] = controller; 

    var controllerContext = new ControllerContext(
    HttpContext, 
    routeData, 
    this); 

    ViewEngineResult result = ViewEngines.Engines.FindView(
    controllerContext, 
    view, 
    null); 

    string content = null; 
    if (result.View != null) 
    { 
    using (StringWriter output = new StringWriter()) 
    { 
     ViewContext viewContext = new ViewContext(
     controllerContext, result.View, viewData, TempData, output); 

     viewContext.View.Render(viewContext, output); 
     result.ViewEngine.ReleaseView(ControllerContext, viewContext.View); 
     content = output.ToString(); 
    } 
    return content; 
    } 
    else 
    throw new InvalidOperationException("Can't find view"); 
} 

我再添加這些重載一拉其他的MVC方法:

protected string ViewContent(string view) 
{ 
    return ViewContent(view, (string)null); 
} 

protected string ViewContent(string view, string controller) 
{ 
    return ViewContent(view, controller, (object)null); 
} 

protected string ViewContent(string view, object model) 
{ 
    return ViewContent(view, (string)null, model); 
} 

protected string ViewContent(string view, 
    string controller, object model) 
{ 
    if (string.IsWhitespaceOrNull(controller) 
    controller = ControllerContext. 
       RouteData.GetRequiredString("controller"); 

    ViewDataDictionary viewData = 
    new ViewDataDictionary(ViewData) { Model = model }; 

    return ViewContent(view, controller, viewData); 
} 
-1

Download Dynamically Generated File in ASP.NET MVC

只需添加

Response.AddHeader("Content-Disposition", "attachment;filename=myfile.csv"); 
ContentResult content = new ContentResult 
     { 
      ContentEncoding = System.Text.Encoding.UTF8, 
      ContentType = "text/csv", Content="..." } return content; } 
+2

請更具體地回答您的問題,因爲在這種情況下,您並未解釋Response.AddHeader如何與ContentResult對象綁定以及爲什麼。 – Fandango68 2017-11-24 00:25:45

相關問題