2010-01-03 41 views
1

我想调试一个问题,其中HtmlHelper在扩展方法中为null。奇怪的调试器声称它是完全填充的,但是我一直得到空例外。我试图找出HtmlHelper应该在哪里实例化,试图查看我的问题可能在哪里。ASP.NET MVC的HtmlHelper实例化的位置

HtmlHelper应该在哪里实例化?

更新:特别是我试图在主页中实现在此处找到的扩展http://chriscavanagh.wordpress.com/2009/06/11/mvc-authorizedactionlink/。该错误发生在MVC模板的HomeController.Index()中。有一些可能导致问题的“插件”/虚拟路径(试图避免这种蠕虫),但是,代码的编码基本上与在此处找到的代码相同:http://www.codeplex.com/unifico。但是,我不想让任何人都了解所有这些细节。

+0

你能告诉我们你的扩展方法的一些代码吗? – 2010-01-03 20:35:28

+0

这里有一个链接,可以帮助你:http://blogs.microsoft.co.il/blogs/gilf/archive/2009/01/13/extending-asp-net-mvc-htmlhelper-class.aspx – 2010-01-03 20:37:31

+0

你可以显示一些简化的代码重现了这个问题?何时&你在哪里打电话给帮手? – Eilon 2010-01-03 20:45:05

回答

3

HtmlHelper由ASP.NET MVC在内部实例化 - 它不是您通常需要担心的事情。究竟它在哪里被实例化取决于你在哪里使用它。

它被实例化的主要地方是ViewPage的InitHelpers()方法。

在ViewUserControls中,它根据需要在Html属性的getter中创建。

在ViewMasterPages中,它只是使用ViewPage的Html属性。

+0

啊,谢谢。似乎表明我的viewcontext为空... – ccook 2010-01-03 20:45:14

+0

ViewContext非常难以为空 - 在代码中有很多安全检查来确保它不会发生。我建议简化代码,直到找出确切的原因。我的猜测是有一些代码在这里做了一些非常疯狂的事情。 – Eilon 2010-01-03 20:47:40

+0

是的,我将这样做......真正让我感到调试器和(运行时?)不同意。调试器将在扩展中显示适当的值。再次感谢 – ccook 2010-01-03 20:59:27

1

我们也遇到了这个(奇怪的是,只有3台机器中的1台),我们有一个母版页,内容页使用HtmlHelper.DropDownList。我们的工作是将using System.Web.Mvc添加到母版页的代码隐藏中,即使它已经在内容页面的代码隐藏中。

+0

我从来没有真正追踪过它...我重新创建了同一个项目,并且问题没有出现 – ccook 2010-02-11 01:41:57