Я хочу вывести два разных вида (один как строка, которая будет отправлена как электронная почта), а другая страница отображается пользователю.
Возможно ли это в бета-версии ASP.NET MVC?
Я попробовал несколько примеров:
  1. RenderPartial для String в бета-версии ASP.NET MVC 
Если я использую этот пример, я получаю сообщение "Не удается перенаправить HTTP отправлены заголовки.".
  2. MVC Framework: захват вывода вида 
Если я использую это, я, похоже, не могу сделать redirectToAction, поскольку он пытается отобразить представление, которое может не существовать. Если я верну взгляд, это полностью перепуталась и совсем не выглядит правильно.
Есть ли у кого-нибудь идеи/решения этих проблем, которые у меня есть или есть предложения для лучших?
Большое спасибо!
Ниже приведен пример. То, что я пытаюсь сделать, это создать метод 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);
}
Принятый ответ от Тима Скотта (изменен и отформатирован немного мной):
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();
    }
    finally
    {
        //Clean up.
        if (filter != null)
        {
            filter.Dispose();
        }
        //Now replace the response filter
        response.Filter = oldFilter;
    }
}
Использование примера
Предполагая вызов от контроллера, чтобы получить электронное письмо с подтверждением заказа, передав местоположение Site.Master.
string myString = RenderViewToString(this.ControllerContext, "~/Views/Order/OrderResultEmail.aspx", "~/Views/Shared/Site.Master", this.ViewData, this.TempData);
