第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何將ASP.NET MVC視圖呈現(xiàn)為字符串?

如何將ASP.NET MVC視圖呈現(xiàn)為字符串?

墨色風雨 2019-05-27 14:58:46
如何將ASP.NET MVC視圖呈現(xiàn)為字符串?我想輸出兩個不同的視圖(一個作為將作為電子郵件發(fā)送的字符串),另一個顯示給用戶的頁面。這是否可以在ASP.NET MVC beta中使用?我嘗試過多個例子:1. ASP.NET MVC Beta中的RenderPartial到String如果我使用此示例,則會收到“在HTTP標頭發(fā)送后無法重定向”。2. MVC框架:捕獲視圖的輸出如果我使用它,我似乎無法執(zhí)行redirectToAction,因為它嘗試渲染可能不存在的視圖。如果我確實返回了視圖,那么它完全搞砸了,看起來根本不正確。有沒有人對我遇到的這些問題有任何想法/解決方案,或者對更好的問題有任何建議?非常感謝!以下是一個例子。我要做的是創(chuàng)建GetViewForEmail方法:public ActionResult OrderResult(string ref){     //Get the order     Order order = OrderService.GetOrder(ref);     //The email helper would do the meat and veg by getting the view as a string     //Pass the control name (OrderResultEmail) and the model (order)     string emailView = GetViewForEmail("OrderResultEmail", order);     //Email the order out     EmailHelper(order, emailView);     return View("OrderResult", order);}Tim Scott接受的答案(由我改變并格式化):public virtual string RenderViewToString(     ControllerContext controllerContext,     string viewPath,     string masterPath,     ViewDataDictionary viewData,     TempDataDictionary tempData){     Stream filter = null;     ViewPage viewPage = new ViewPage();     //Right, create our view     viewPage.ViewContext = new ViewContext(controllerContext, new WebFormView(viewPath, masterPath), viewData, tempData);     //Get the response context, flush it and get the response filter.     var response = viewPage.ViewContext.HttpContext.Response;     response.Flush();     var oldFilter = response.Filter;     try     {         //Put a new filter into the response         filter = new MemoryStream();         response.Filter = filter;         //Now render the view into the memorystream and flush the response         viewPage.ViewContext.View.Render(viewPage.ViewContext, viewPage.ViewContext.HttpContext.Response.Output);         response.Flush();         //Now read the rendered view.         filter.Position = 0;         var reader = new StreamReader(filter, response.ContentEncoding);         return reader.ReadToEnd();     }
查看完整描述

3 回答

?
寶慕林4294392

TA貢獻2021條經驗 獲得超8個贊

這個答案不在我的路上。這最初來自https://stackoverflow.com/a/2759898/2318354, 但在這里我已經展示了將它與“靜態(tài)”關鍵字一起使用的方法,使其適用于所有控制器。

為此,你必須static在類文件中創(chuàng)建類。(假設您的類文件名是Utils.cs)

這個例子是For Razor。

Utils.cs

public static class RazorViewToString{
    public static string RenderRazorViewToString(this Controller controller, string viewName, object model)
    {
        controller.ViewData.Model = model;
        using (var sw = new StringWriter())
        {
            var viewResult = ViewEngines.Engines.FindPartialView(controller.ControllerContext, viewName);
            var viewContext = new ViewContext(controller.ControllerContext, viewResult.View, controller.ViewData, controller.TempData, 
            sw);
            viewResult.View.Render(viewContext, sw);
            viewResult.ViewEngine.ReleaseView(controller.ControllerContext, viewResult.View);
            return sw.GetStringBuilder().ToString();
        }
    }}

現(xiàn)在,您可以通過將“this”作為參數(shù)傳遞給Controller,在控制器文件中添加NameSpace,從控制器調用此類。

string result = RazorViewToString.RenderRazorViewToString(this ,"ViewName", model);

根據(jù)@Sergey給出的建議,這個擴展方法也可以從cotroller調用,如下所示

string result = this.RenderRazorViewToString("ViewName", model);

我希望這對你使代碼干凈整潔有用。


查看完整回答
反對 回復 2019-05-27
  • 3 回答
  • 0 關注
  • 939 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號