我希望在我的视图模型中某个条件成立时执行一段JavaScript:
<script type="text/javascript">
@if (Model.Employees.Count > 1)
{
executeJsfunction();
}
</script>
此代码无法编译,我该怎么做?
答案 0 :(得分:37)
试试这个:
<script type="text/javascript">
@if (Model.Employees.Count > 1)
{
@:executeJsfunction();
}
</script>
请注意“ @:”
答案 1 :(得分:14)
使用js if-else
块,而不是C#。 Js有自己的if-else
块。
<script type="text/javascript">
if (@Model.Employees.Count > 1)
{
executeJsfunction();
}
</script>
答案 2 :(得分:11)
如果你有更复杂的JS,你可以执行以下操作(脚本标签或任何标签,如果不需要额外的转义):
@if (Model.Employees.Count > 1)
{
<script type="text/javascript">
$(function() {
executeJsfunction();
});
</script>
}
答案 3 :(得分:5)
对于剃刀条件块中的多行脚本,您可以使用:
<script type="text/javascript">
@if (Model.Employees.Count > 1)
{
<text>
executeJsfunctionOne();
executeJsfunctionTwo();
executeJsfunctionThree({
"var_one": true,
"var_two": false
});
</text>
}
</script>
这可以使它比每行添加@:更清晰,更实用。 <text></text>
块中的所有内容都呈现为脚本。
答案 4 :(得分:0)
我知道这个问题刚刚发布,但我添加了一个新的解决方案作为替代解决方案:
您可以将模型中的值注入所选DOM元素的数据属性,并通过检查构建视图时注入的相同数据属性的值来验证您的条件。
例如,检查以下视图和脚本代码段如何操作:<div id="myDiv" data-count="@Model.Employees.Count">
</div>
<script>
if($("#myDiv").data("count") > 1){
executeJsfunction();
}
</script>
答案 5 :(得分:0)
如果您甚至不想基于某些条件呈现Java脚本
在布局html中定义一个部分
<html>
<body>
@RenderSection("xyz", required: false)
</body>
</html>
您认为
@if (Model.Condition)
{
@section xyz{
<script>
$(function () {
// Your Javascript
});
</script>
}
}
就我而言,如果该功能未启用,我不想公开我的Javascript,这也会减小页面的大小
答案 6 :(得分:0)
MVC变量是在服务器端处理的,代码始终尝试呈现Javascript值以生成HTML,请尝试以下代码:
<script type="text/javascript">
@{if (Model.Employees.Count > 1)
{
@:executeJsfunction();
}
}
</script>
我希望这会有所帮助。