ASP.NET MVC在Html助手中使用渲染部分

时间:2010-01-18 13:43:52

标签: asp.net-mvc

我有一个HtmlHelper扩展,当前使用字符串生成器和相当数量的复杂逻辑返回一个字符串。我现在想要添加一些额外的东西,它来自渲染部分调用,就像这样......

public static string MyHelper(this HtmlHelper helper)
{
    StringBuilder builder = new StringBuilder();
    builder.Append("Hi There");
    builder.Append(RenderPartial("MyPartialView"));
    builder.Append("Bye!");
    return builder.ToString();
}

现在当然RenderPartial直接渲染到响应,所以这并没有工作,我已经尝试了几种解决方案来将局部变换为字符串但是所有这些似乎都落在了我在该部分内使用HtmlHelper。

这可能吗?

3 个答案:

答案 0 :(得分:67)

因为这个问题虽然陈旧且有明显的答案,但在Google中出现了,我会给出不同的答案。

在asp.net mvc 2和3中,有一个Html.Partial(...)方法,它的工作方式与RenderPartial类似,但是将部分视图作为字符串返回,而不是直接渲染它。

你的榜样因此变成:

//using System.Web.Mvc.Html;
public static string MyHelper(this HtmlHelper helper)
{
    StringBuilder builder = new StringBuilder();
    builder.Append("Hi There");
    builder.Append(helper.Partial("MyPartialView"));
    builder.Append("Bye!");
    return builder.ToString();
}

答案 1 :(得分:0)

我发现接受的答案打印出了ASP.NET MVC5中页面上的可见HTML,例如:

@Html.ShowSomething(Model.MySubModel, "some text")

所以我发现到达render it properly的方法是返回一个MvcHtmlString

public static MvcHtmlString ShowSomething(this HtmlHelper helper, 
      MySubModel subModel, string someText)
{
    StringBuilder sb = new StringBuilder(someText);

    sb.Append(helper.Partial("_SomeOtherPartialView", subModel);

    return new MvcHtmlString(sb.ToString());
}

答案 2 :(得分:-2)

你不应该从帮助者那里调用部分内容。帮助者“帮助”你的观点,而不是其他。从MVCContrib(如果您现在需要)或MVC v2(如果您可以再等几个月)查看RenderAction方法。您可以将模型传递给标准控制器操作并返回部分结果。