2013-01-20 40 views
7

这是我的剃刀代码抛出错误:asp.net的MVC 4 JavaScript的内部剃刀块抛出错误

@section script 
{ 
    <script type="text/javascript"> 
     $(document).ready(function() { 
      @if (TempData["Message"] != null) 
      { 
       showNotification("'" + TempData["Message"].ToString() + "'"); 
      } 
     }); 
    </script> 
} 

它说showNotification不存在。它认为这是一个C#代码,它是一个JavaScript函数。有谁能让我知道我该如何解决这个错误?谢谢!

+0

我知道这不是答案,人们会告诉你解决这个问题的很多方法之一(@:语法之一)。我只是完全删除@if语句,而不是显式地调用ToString(),但让它隐式调用。这将工作 –

+0

TempData的问题是,如果TempData [“Foo”]为空,那么你得到一个NPE。所以使用ViewBag – DarthVader

回答

15

围绕它抛出一个text标记,因为编译器认为你的JavaScript是Razor语法。当你这样做时,你需要添加一个@到TempData调用。

@section script 
{ 
    <script type="text/javascript"> 
     $(document).ready(function() { 
      @if (TempData["Message"] != null) 
      { 
       <text>showNotification('@TempData["Message"].ToString()');</text> 
      } 
     }); 
    </script> 
} 
6

除了@马丁的回答,你还可以把@:放在showNotification调用的前面。 @:语法告诉Razor将单行视为HTML,其中告诉Razor将text标签内的任何内容视为HTML(对多行有用,其中@:对单行很有用)。