我想覆盖或创建一个自定义函数来包装System.Web.Mvc.Html RenderPartialExtensions中的RenderPartial共享函数。
我在这里找到一篇文章谈论这个想法: http://johncoder.com/Post/AdventuresinDebuggingAFriendlierCalltoRenderPartial
<% Html.TryRenderPartial("ClassB", Model.B); %>
在上面的示例中,他们创建了一个名为TryRenderPartial的自定义子,它执行某些逻辑并在必要时调用RenderPartial。不幸的是,本文没有给出TryRenderPartial子本身的代码示例。
我无法弄清楚如何创建此函数,因为RenderPartialExtensions不可继承。另外我不确定如何实际输出html,因为RenderPartial是一个sub,而不是一个函数,所以我不知道如何实际“返回”html。有什么想法吗?
答案 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不通过继承工作,他们使用扩展方法。