0

我想让我的 Razor 视图返回它呈现的 html 字符串,以便控制器从视图返回呈现的 html 字符串,而不仅仅是视图。我在 ASP.NET MVC 中找不到本地方法来执行此操作。有什么解决方法吗?

通过说明性示例:

 public ActionResult Index()
        {
            return View().ToString; //View has no ToString() method but this is what I am trying to do
        }
4

1 回答 1

3

您可以使用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());
于 2012-04-12T10:23:32.087 回答