1

我是 MVC 应用程序的新手,我正在尝试将剃刀视图呈现为字符串。当我从自己的控制器中调用它时,我的代码效果很好,尽管当我尝试从另一个控制器调用控制器时,即使我向它发送 ControllerContext 控制器上下文最终为空。我确定我在某个我无法弄清楚的地方丢失了上下文。

这是一些代码。

这就是我称之为控制器的地方。

var emailController = new EmailController();
emailController.ControllerContext = this.ControllerContext;
emailController.SendMail(entry.email, entry.first, entry.word);

这是我调用将返回一串 html 的方法的地方。其中“模板”是一个视图(Template.cshtml),而 emailTemplate 是我刚刚创建的模型。

var emailTemplate = new EmailModel 
{ 
    name = name,
    emailAddress = emailAddress,
    sent = "not Sent"
};    

htmlFromView = renderRazorViewToString("Template", emailTemplate);

这是我的方法,应该从视图中返回一串 html。问题是 viewContext 返回 null。

private string renderRazorViewToString(string viewname, object model)
    {
        ViewData.Model = model;
        using (var sW = new StringWriter())
        {
            var viewResult = ViewEngines.Engines.FindPartialView(ControllerContext, viewname);
            var viewContext = new ViewContext(ControllerContext, viewResult.View, ViewData, TempData, sW);
            viewResult.View.Render(viewContext, sW);
            viewResult.ViewEngine.ReleaseView(ControllerContext, viewResult.View);
            return sW.GetStringBuilder().ToString();

        }
    }

如果我不从其他控制器调用 EmailController,这将非常有效。我是否也需要将上下文传递给模型或类似的东西?

在此先感谢您的帮助。

4

2 回答 2

0

这将适用于部分。我认为仅使用视图名称它也适用于非部分。

protected string RenderPartialViewToString(string viewName, object model)
{
    if (string.IsNullOrEmpty(viewName))
       viewName = ControllerContext.RouteData.GetRequiredString("action");
    ViewData.Model = model;
    using (StringWriter sw = new StringWriter())
    {
        ViewEngineResult viewResult = ViewEngines.Engines.FindPartialView(ControllerContext, viewName);
        ViewContext viewContext = new ViewContext(ControllerContext, viewResult.View, ViewData, TempData, sw);
        viewResult.View.Render(viewContext, sw);
         return sw.GetStringBuilder().ToString();
    }
 }
于 2013-05-12T00:31:01.327 回答
0

我意识到我的问题是,由于我从另一个控制器调用动作结果,它正在该控制器的股票搜索位置中寻找调用另一个动作结果的视图。

解决方案:将视图移动到该控制器调用其他操作结果的股票搜索位置。

于 2013-05-31T19:30:35.107 回答