如何在不同项目的Controller中使用HtmlHelper?

时间:2014-03-25 20:59:43

标签: asp.net-mvc asp.net-mvc-4

我正在开发一个MVC项目,其中视图和控制器位于我的解决方案中的不同项目中。

我试图解决的问题是:我有一个动作应该返回一个带有一些信息和一个Html字符串的Json。

此Html字符串已在局部视图中。任何控制器中的任何操作都不会返回此部分。它在另一个视图中调用。

所以,我读到在控制器中使用HtmlHelper并不是一个好习惯。但是,如果我不这样做,我将重复html(部分视图和作为此特定操作的字符串)。

我想要的是渲染一个字符串的视图,允许我将html集中在视图上。一旦我将视图呈现为字符串,我就可以将其作为返回的json对象的属性返回。

正如我所说,控制器位于不同的项目中,已经引用了 System.Web.Mvc 。但是一旦我键入“HtmlHelper”。 “部分”方法不在选项范围内。在某些季节,即使System.Web.Mvc.Html.PartialExtensions可以使用,Visual Studio也不会让我使用它。

如果不在控制器中使用HtmlHelper,有没有不同的方法来解决这个问题?

Visual Studio可以根据将要使用的位置过滤方法吗?或者我错过了一些参考?

Ps。:我正在使用Visual Studio 2010,.Net Framework 4,Asp.Net MVC 4.

提前致谢。

1 个答案:

答案 0 :(得分:1)

听起来您希望将部分视图呈现为字符串并将其作为JSON响应的一部分返回。以下方法将允许您这样做

protected string PartialViewAsString(string partialviewName, object model)
{
    if (string.IsNullOrEmpty(partialviewName))
    {
        partialviewName = ControllerContext.RouteData.GetRequiredString("action");
    }

    var viewData = ViewData;   
    ViewData = new ViewDataDictionary(viewData) { Model = model };

    using (var writer = new StringWriter())
    {
        var viewResult = ViewEngineCollection.FindPartialView(ControllerContext, partialviewName);
        var viewContext = new ViewContext(ControllerContext, viewResult.View, ViewData, TempData, writer);
        viewResult.View.Render(viewContext, writer);
        ViewData = viewData;

        return writer.ToString();
    }
}

在相关控制器上或从您从中派生控制器的基本控制器上实现它。