MVC - 如何为Html.RenderPartial创建包装器?

时间:2014-09-16 04:26:31

标签: asp.net-mvc vb.net

我想覆盖或创建一个自定义函数来包装System.Web.Mvc.Html RenderPartialExtensions中的RenderPartial共享函数。

我在这里找到一篇文章谈论这个想法: http://johncoder.com/Post/AdventuresinDebuggingAFriendlierCalltoRenderPartial

<% Html.TryRenderPartial("ClassB", Model.B); %>

在上面的示例中,他们创建了一个名为TryRenderPartial的自定义子,它执行某些逻辑并在必要时调用RenderPartial。不幸的是,本文没有给出TryRenderPartial子本身的代码示例。

我无法弄清楚如何创建此函数,因为RenderPartialExtensions不可继承。另外我不确定如何实际输出html,因为RenderPartial是一个sub,而不是一个函数,所以我不知道如何实际“返回”html。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

包装RenderPartial实际上是微不足道的。你只需创建一个HtmlHelper扩展(在C#中,我不会说VB):

public static class MyRenderPartialExtensions
{
    public static void MyRenderPartial(this HtmlHelper htmlHelper, string partialViewName)
    {
        htmlHelper.RenderPartial(partialViewName)
    }
}

您可以为要实现的其他重载添加类似的方法。

然而,很可能,你可能并不真的想要这样做......最有可能的是,你想要做的事情已经以框架所暴露的方式实现。

这就是所谓的XY问题,这基本上意味着你有问题X,并且你已经决定你需要做Y来解决它。但是,您无法弄清楚如何解决问题Y,因此您不会询问如何执行Y而不是询问如何解决原始X问题。

XY问题很糟糕的原因是因为机会很大,你决定需要做的解决方案不是正确的解决方案,而且你遇到问题的原因是因为它&#39 ;不是正确的做事方式。

坦率地说,我无法想出包装RenderPartial的充分理由,因为你所做的任何事情都很可能以其他方式进行。

要回复您的其他评论,Html帮助者不会返回&#34;任何东西。这就是为什么他们会成为Sub's的原因。视图渲染的工作原理相当复杂,而不是在SO答案中容易讨论的主题。

HtmlHelpers不通过继承工作,他们使用扩展方法。

http://msdn.microsoft.com/en-us/library/bb384936.aspx