我正在开发一个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.
提前致谢。
答案 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();
}
}
在相关控制器上或从您从中派生控制器的基本控制器上实现它。