Asp.net mvc 3 获取渲染视图的副本

Asp.net mvc 3 获取渲染视图的副本,asp.net-mvc-3,Asp.net Mvc 3,这听起来可能有点奇怪,但本质上我试图在控制器中提前渲染视图,以便将其传递给模型中的属性。(这是为了以后我可以将视图的呈现HTML传递给服务调用,所以我有一个理由。)我的代码几乎可以实现这一点(改编自),但会产生返回已呈现两次的视图的不良副作用: public ActionResult Action(object paramater) { var model = new MyModel(parameter); ViewResult view = View("~/... path to

这听起来可能有点奇怪,但本质上我试图在控制器中提前渲染视图,以便将其传递给模型中的属性。(这是为了以后我可以将视图的呈现HTML传递给服务调用,所以我有一个理由。)我的代码几乎可以实现这一点(改编自),但会产生返回已呈现两次的视图的不良副作用:

public ActionResult Action(object paramater)
{
   var model = new MyModel(parameter);
   ViewResult view = View("~/... path to view .../View.cshtml", model);

   string data;

   using (var sw = new StringWriter())
   {
      view.ExecuteResult(ControllerContext);
      var viewContext = new ViewContext(ControllerContext, view.View, ViewData, TempData, sw);
      view.View.Render(viewContext, sw);
      data = sw.ToString();
   }

   model.ViewRender = data;

   return view;
}
这成功地将视图的HTML副本放入模型中,但是视图本身被渲染了两次(看起来如此),因此我得到了一个网页,它是同一事物的两个副本,一个在另一个之上


我尝试了几种不同的返回视图的方法,但没有这种副作用。使用
返回视图(模型)
创建一个全新的视图,使用另一种方法,迄今为止没有任何效果。

您应该返回原始内容,而不是返回视图:

return Content(data, "text/html");

我想出来了
view.executesult()
直接写入
HttpContext.Response
,因此在返回新视图之前调用
HttpResponse.Clear()
效果很好:

public ActionResult Action(object paramater)
{
   var model = new MyModel(parameter);
   ViewResult view = View("~/... path to view .../View.cshtml", model);

   string data;

   using (var sw = new StringWriter())
   {
      view.ExecuteResult(ControllerContext);
      var viewContext = new ViewContext(ControllerContext, view.View, ViewData, TempData, sw);
      view.View.Render(viewContext, sw);
      data = sw.ToString();
   }

   model.ViewRender = data;
   HttpContext.Response.Clear();

   return View("~/... path to view .../View.cshtml", model);
}

不起作用。我仍然得到了一个重复的视图,最重要的是它不会传递我的模型。不会传递你的模型给什么?尝试返回
null
void
。我希望渲染视图的全部原因是将其传递到模型中。使用
return Content
不会使用我渲染的数据,这违背了这个问题的全部目的。如果视图已经在模型中渲染,为什么需要再次渲染?(或者我误解了吗?)我想(1)像平常一样将视图放在浏览器中,(2)能够检索呈现的HTML供以后使用,就像我在问题中所说的那样。