调用JavaScript函数在MVC 5 Razor视图

问题描述:

我在另一篇文章中看到,你可以调用JavaScript函数在你的剃须刀的代码如下所示:调用JavaScript函数在MVC 5 Razor视图

@:FunctionName() 

对我来说,虽然这仅输出实际的话FunctionName()

这是我的观点:

@model PriceCompare.Models.QuoteModel 

@{ 
    ViewBag.Title = "Quote"; 
} 

<h2>Quote</h2> 

@if (@Model.clarify == true) 
{ 
    // do drop down loic 
    @:ShowClarify(); 
} 
else 
{ 
    // fill quote 
    @:ShowQuote(); 
} 
<div class="clarify"> 

    You can see the clarify div 
</div> 
<div class="quote"> 

    You can see the quote div 
</div> 

@section head { 

    <script type="text/javascript"> 

     $(document).ready(
      function ShowQuote() { 
       $(".quote").show(); 
      }, 
      function ShowClarify() { 
       $(".clarify").show(); 
      } 
     ); 

    </script> 
} 

难道是因为我在一个'@if嵌套它?无论如何围绕这个?

你需要把你的JavaScript在<script>标签,你需要调用其范围内的功能:

<script type="text/javascript"> 

    $(document).ready(
     function ShowQuote() { 
      $(".quote").show(); 
     }, 
     function ShowClarify() { 
      $(".clarify").show(); 
     } 

     @if (@Model.clarify == true) 
     { 
      // do drop down loic 
      ShowClarify(); 
     } 
     else 
     { 
      // fill quote 
      ShowQuote(); 
     } 
    ); 

</script> 
+0

谢谢。 “@:”语法是什么东西?它是否停产? – Guerrilla 2014-11-04 13:27:36

+2

'@:'语法只是告诉Razor将后面的内容视为纯文本。在代码块的上下文中,这对于防止Razor尝试在C#/ VB上下文中运行'FunctionName()'方法而非实际存在的JavaScript上下文是必要的。 – 2014-11-04 14:04:25

+0

@Guerrilla我没有把它放在Visual Studio中,所以可能你仍然需要javascript函数调用前的'@:'。 – jrummell 2014-11-04 14:14:40

如果您传递任何参数给JavaScript函数,它必须用引号引起来( '')。

foreach (var item in files) 
    { 
     <script type="text/javascript"> 
      Attachment(**'@item.FileName'**, **'@item.Size'**); 
     </script> 
    } 
+1

您应该使用代码格式化选项(选择代码Ctrl-k)以确保您的代码以您希望它在您的答案中的方式显示。另外,最好在你的示例中使用问题中的某些内容来更清楚地表达你的意思。 – Tibrogargan 2016-07-14 20:40:30