【问题标题】:ASP.NET MVC Using Render Partial from Within an Html HelperASP.NET MVC 在 Html Helper 中使用 Render Partial
【发布时间】:2010-01-18 13:43:52
【问题描述】:

我有一个 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。

这可能吗?

【问题讨论】:

    标签: asp.net-mvc


    【解决方案1】:

    因为这个问题虽然陈旧且被标记为已回答,但出现在 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();
    }
    

    【讨论】:

    • 非常感谢。实际上,这应该被标记为正确答案。
    • 完美运行,我想强调这一行:using System.Web.Mvc.Html
    • 非常感谢,像魅力一样工作:)
    【解决方案2】:

    我发现接受的答案在 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());
    }
    

    【讨论】:

      【解决方案3】:

      您不应该从助手调用局部变量。助手“帮助”您的观点,仅此而已。从MVCContrib(如果您现在需要它)或MVC v2(如果您可以再等几个月)查看 RenderAction 方法。您可以将模型传递给标准控制器操作并返回部分结果。

      【讨论】:

      • 在某些情况下是的(可能包括这个),但我尽量将我的 HTML 保存在类似 HTML 的文件中,并使用 Html 助手来执行有关如何组合它们的逻辑。这样我仍然可以在我的 html 中获得不错的编辑器功能。然而,不使用渲染部分正是我在这种情况下所做的。
      猜你喜欢
      • 2014-12-09
      • 1970-01-01
      • 2013-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-29
      • 1970-01-01
      相关资源
      最近更新 更多