ASP.NET MVC Razor:如何在控制器动作中呈现Razor部分视图的HTML

19 浏览
0 Comments

ASP.NET MVC Razor:如何在控制器动作中呈现Razor部分视图的HTML

如何在ASP.NET视图引擎上生成给定部分视图的HTML是已知的。但是,如果在Razor部分视图上使用此功能,它将不起作用,因为异常显示部分视图没有继承自"UserControl"。如何修复渲染以支持Razor部分视图?

我需要这个是因为我从这些部分视图中生成电子邮件...

更新:

失败的代码(@mcl):

public string RenderPartialToString(string controlName, object viewData)
{
    ViewPage viewPage = new ViewPage() { ViewContext = new ViewContext() };
    viewPage.Url = this.GetUrlHelper();
    string fullControlName = "~/Views/Email/" + controlName + ".ascx";
    viewPage.ViewData = new ViewDataDictionary(viewData);
    viewPage.Controls.Add(viewPage.LoadControl(fullControlName));
    StringBuilder sb = new StringBuilder();
    using (StringWriter sw = new StringWriter(sb))
    {
        using (HtmlTextWriter tw = new HtmlTextWriter(sw))
        {
            viewPage.RenderControl(tw);
        }
    }
    return sb.ToString();
}

0
0 Comments

ASP.NET MVC Razor: 如何在控制器操作中呈现Razor Partial View的HTML

在ASP.NET MVC中,有时候我们需要在控制器操作中呈现Razor Partial View的HTML。以下是解决这个问题的原因和解决方法。

问题的原因是RenderView方法是void类型的,无法直接返回Partial View的HTML。因此,我们需要找到一种方法来获取Partial View的HTML。

解决方法是使用RenderView控制器扩展方法。这个方法可以从这里(源代码在这里)获取。使用这个方法,我们可以在控制器操作中获取Partial View的HTML。

下面是使用RenderView方法的示例代码:

public ActionResult Do() {
    var html = this.RenderView("index", theModel);
    // ...
}

这个方法适用于Razor和Web Forms视图引擎。

需要注意的是,RenderView方法是一个自定义控制器扩展方法,需要将其添加到项目中才能使用。

希望这篇文章能帮助大家解决在控制器操作中呈现Razor Partial View的HTML的问题。

0
0 Comments

ASP.NET MVC Razor:如何在控制器操作中呈现Razor部分视图的HTML

在ASP.NET MVC中,我们通常可以在视图中使用.Partial方法来呈现部分视图的HTML。但是如果我们想在控制器操作中呈现部分视图的HTML,该怎么办呢?

下面是一种解决方法:

首先,我们可以创建一个帮助方法RenderPartialViewToString,该方法用于将部分视图呈现为字符串。该方法的代码如下:

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();
    }
}

该方法首先将viewName参数设置为当前控制器操作的名称,然后将model参数设置为视图的模型数据。接下来,使用ViewEngines.Engines.FindPartialView方法查找部分视图的引擎结果。然后,使用ViewContext类创建一个视图上下文,并使用sw字符串写入器来呈现部分视图。最后,将呈现的HTML作为字符串返回。

然后,我们可以在控制器操作中调用RenderPartialViewToString方法,以获取部分视图的HTML。例如:

public ActionResult MyAction()
{
    // 获取部分视图的HTML
    string partialViewHtml = RenderPartialViewToString("nameOfPartial", Model);
    // 在控制台输出部分视图的HTML
    Console.WriteLine(partialViewHtml);
    // 其他操作逻辑...
    return View();
}

通过上述方法,我们可以在控制器操作中呈现部分视图的HTML,以便在其他场景中使用。这对于生成电子邮件等需求非常有用。

需要注意的是,该方法只能呈现部分视图的HTML,无法执行部分视图中的jQuery代码,因为jQuery是在客户端执行的,而视图是在服务器端生成的。

0
0 Comments

原因:

问题的提出者想要找到一种在控制器操作中渲染Razor Partial View的HTML的方法。虽然已经有一些解决方案被提供,但提出者希望能提供一个更简洁的解决方案,该解决方案可以在MVC控制器类中没有可用的帮助方法的情况下使用。提出者提到了一个名为"RazorEngine"的第三方库,通过使用.NET文件IO来获取Razor文件的内容并调用Razor.Parse方法来实现目标。

解决方法:

使用第三方库RazorEngine,可以通过以下步骤来渲染Razor Partial View的HTML:

1. 下载并引入RazorEngine库。可以在这里获取该库。

2. 在控制器操作中,使用.NET文件IO方法获取Razor文件的内容,将其存储在一个字符串变量中。

3. 调用Razor.Parse方法,传入Razor文件的内容和模型对象作为参数。该方法将返回一个字符串,其中包含了根据模型对象渲染后的HTML。

以下是一个示例代码:

using RazorEngine;
public class MyController : Controller
{
    public ActionResult MyAction()
    {
        // 获取Razor文件的内容
        string razorViewContentString = System.IO.File.ReadAllText("Path/To/MyRazorView.cshtml");
        // 创建模型对象
        var modelObject = new MyModel();
        // 调用RazorEngine库的Razor.Parse方法来渲染HTML
        string html = Razor.Parse(razorViewContentString, modelObject);
        // 将渲染后的HTML返回给视图
        return Content(html);
    }
}

通过以上步骤,可以在控制器操作中使用RazorEngine库来渲染Razor Partial View的HTML,而不需要使用MVC控制器类中的帮助方法。

0