0

我需要在我的一个控制器中使用由 razor 模板生成的 html,这是一个实际上用于处理 ajax 列表的抽象控制器。这样我就可以有一个通用的 ajax 列表实现,它适用于任何类型的模型,并提供标准操作,如添加/编辑/删除...

由于我想在服务器上生成列表元素,我想我可以为每个元素制作剃须刀模板,然后在 JSON 对象中返回生成的 html(用于新元素或编辑元素),如下所示:

  • 指示操作是否成功的标志
  • 描述错误的错误字段(如果有)
  • 生成的html

起初我考虑实例化一个HtmlHelper(如这里解释:HtmlHelper in controller)并使用该EditorFor方法,但我想知道这是否是实现这一目标的好方法,因为创建一个实例HtmlHelper似乎是一个相当耗时的操作。

有没有一种简单的方法来执行正确的剃须刀模板并在字符串中获取 html?

还有更好的方法来实现这种通用行为吗?

4

1 回答 1

4

我创建了一个可以解决问题的方法。我创建该方法的原因与您的相同;我想返回一个JsonResult不仅包含标记,还包含其他一些数据。

public string RenderPartialViewToString(string viewName, object model, ViewDataDictionary viewData = null)
{
    ViewData.Model = model;

    if (viewData != null)
        foreach (KeyValuePair<string, object> item in viewData)
            ViewData.Add(item);

    using (var sw = new System.IO.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();
    }
}

我将此方法放在我的基本控制器中,以便我的所有控制器都可以访问它。

于 2013-09-03T15:16:21.303 回答