您可以使用Html.Partial
返回一个MvcHtmlString
视图。
您可以在 中找到Partial
方法 System.Web.Mvc.Html.PartialExtensions
。
这里有关于此方法的更多信息:http: //msdn.microsoft.com/en-us/library/ee402898.aspx
我个人将它用于我的 RenderPartials(复数)扩展方法:
public static void RenderPartials<T>(this HtmlHelper helper,
string partialViewName, IEnumerable<T> models, string htmlFormat)
{
if (models == null)
return;
foreach (var view in models.Select(model =>
helper.Partial(partialViewName,model, helper.ViewData)))
{
helper.ViewContext.HttpContext.Response
.Output.Write(htmlFormat, view);
}
}
更新
要将视图呈现为控制器中的字符串,您可以执行以下操作(尽管它看起来有点像 hack):
var htmlHelper = new HtmlHelper(new ViewContext(), new ViewPage());
var viewString = htmlHelper.Partial("PartialViewName");
我说它有点像黑客的原因是因为 HtmlHelper 被设计用于您的视图而不是您的控制器或模型中。话虽如此,如果它有效并且没有替代方法可以对解析的视图进行字符串化,那么它可能对您有用。
鉴于对您的问题的修改,您将寻找如下内容:
public string Index()
{
var htmlHelper = new HtmlHelper(new ViewContext(), new ViewPage());
return htmlHelper.Partial("PartialViewName");
}
如果上面的代码没有正确创建 htmlHelper,你可以像这样创建它:
TextWriter writer = new StringWriter();
var htmlHelper = new HtmlHelper(new ViewContext(ControllerContext,
new RazorView(ControllerContext, "","",true,null),
new ViewDataDictionary(),
new TempDataDictionary(), writer), new ViewPage());