在剃刀视图</script>中的<script>标签内的C#'if'关键字

时间:2011-10-06 15:42:21

标签: c# javascript asp.net-mvc-3 razor

我正在尝试在ASP.Net-MVC razor视图中编写以下代码,但页面无法编译。

<script>     

    @(if (Model.IsValid))
     {
        ("#ErrorMessage).text("Error");
     }
    else
    {
       ("#Registration).text("Done!");
    }

</script> 

我为实现该操作做了一些变通方法,但有一种简单的方法吗?

2 个答案:

答案 0 :(得分:42)

试试这样:

<script type="text/javascript">
    @if (ViewData.ModelState.IsValid)
    {
        <text>$('#ErrorMessage').text('Error');</text>
    }
    else
    {
        <text>$('#Registration').text('Done!');</text>
    }
</script>

需要注意的事项:

  • 使用ViewData.ModelState.IsValid来测试是否存在模型状态错误
  • 使用特殊<text>来指示剃刀解析器按原样使用文本
  • 使用$函数,因为我认为这是jQuery代码
  • 正确关闭javascript字符串周围的引号
  • 在脚本标记上使用type="text/javascript"属性。

答案 1 :(得分:2)

这是一种可能看起来更好的解决方法:

<script>
    var modelIsValid = '@ViewData.ModelState.IsValid' == '@true';
    if(modelIsValid)
    {
        $("#ErrorMessage").text("Error");
    }
    else
    {
        $("#Registration").text("Done!");
    }
</script> 

使用'@true'确保真正的字符串始终正确(而不是像'True'那样硬编码)。