无法对空引用执行运行时绑定。为什么?

时间:2014-04-24 20:33:52

标签: asp.net-mvc

我在MVC 5视图中有以下代码:

<a href="@Url.Action(MVC.Home.Index())">
  <img src="@Url.Content("~/assets/logo.png")" data-at2x="@Url.Content("~/assets/logo@2x.png")"/>
</a>

然后应用程序停止,我收到以下错误:

  

无法对空引用执行运行时绑定

     

描述:执行当前Web请求期间发生了未处理的异常。请查看堆栈跟踪,以获取有关错误及其在代码中的起源位置的更多信息。

     

异常详细信息:Microsoft.CSharp.RuntimeBinder.RuntimeBinderException:无法对空引用执行运行时绑定

当我点击图片时,我看到2条消息:

  

在base 64中编码图像   定义宽度和高度属性

这很奇怪,因为错误只是偶然发生......

知道为什么会这样吗?

2 个答案:

答案 0 :(得分:1)

错误是因为您正在使用 -

data-at2x="@Url.Content("~/assets/logo@2x.png")"

MVC 5剃刀解析器在关键字字符@@logo@2x.png之间混淆了。要么重命名要么用@()这样转义 -

data-at2x="@Url.Content("~/assets/logo@("@")2x.png")"

重命名它会更好。会为你节省很多喧嚣。

答案 1 :(得分:0)

我认为MVC.Home.Index()有时会返回null,这意味着C#运行时无法知道要调用Url.Action()的重载。