相关疑难解决方法(0)

如何将ASP.NET MVC视图呈现为字符串?

我想输出两个不同的视图(一个作为将作为电子邮件发送的字符串),另一个显示给用户的页面.

这是否可以在ASP.NET MVC beta中使用?

我尝试过多个例子:

1. ASP.NET MVC Beta中的RenderPartial到String

如果我使用此示例,则会收到"在HTTP标头发送后无法重定向".

2. MVC框架:捕获视图的输出

如果我使用它,我似乎无法执行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);
}
Run Code Online (Sandbox Code Playgroud)

Tim Scott接受的答案(由我改变并格式化):

public virtual string RenderViewToString(
    ControllerContext controllerContext,
    string viewPath, …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc rendering

473
推荐指数
9
解决办法
29万
查看次数

寻找单元测试方向的控制器扩展,以呈现局部视图

正如标题所说,我正在寻找如何正确测试控制器扩展的方向.扩展呈现部分视图,而我在JSONResult中使用它:

 public static string RenderPartialViewToString(this Controller controller, string viewName = null, object model = null)
        {
            if (string.IsNullOrEmpty(viewName))
            {
                viewName = controller.ControllerContext.RouteData.GetRequiredString("action");
            }

            controller.ViewData.Model = model;

            using (StringWriter sw = new StringWriter())
            {
                ViewEngineResult viewResult = ViewEngines.Engines.FindPartialView(controller.ControllerContext, viewName);
                ViewContext viewContext = new ViewContext(controller.ControllerContext, viewResult.View, controller.ViewData, controller.TempData, sw);
                viewResult.View.Render(viewContext, sw);
                return sw.GetStringBuilder().ToString();
            }
        }
Run Code Online (Sandbox Code Playgroud)

用法示例:

public JsonResult Foo()
{
    var model = _repository.getSomeData();

    return Json(new { html = this.RenderPartialViewToString("Index", model) }, JsonRequestBehavior.AllowGet);
}
Run Code Online (Sandbox Code Playgroud)

我正在使用NUnit和MvcContrib测试助手,但是在设置使用此扩展的控制器时,我遇到了NRE.我假设控制器上下文没有正确设置?

最终,测试正在进行ViewEngines.Engines.FindPartialView.以下是失败测试的一部分:

var routeData …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc nunit unit-testing mvccontrib-testhelper asp.net-mvc-3

13
推荐指数
1
解决办法
3216
查看次数