我从事ASP.NET MVC 5项目。
我尝试在cshtml页面的脚本区域中使用razor语法:
<script type="text/javascript">
var url = '@Url.Content("~/Account/Login/")';
@if (Request.IsAuthenticated)
{
url = '@Url.Content("~/Account/GetLayers/")';
}
</script>
但是当我运行页面时,我会看到这一行:
url = '@Url.Content("~/Account/GetLayers/")';
此错误:
CS1012:字符文字中的字符太多
所以我尝试了这个:
url = "@Url.Content("~/Account/GetLayers/")";
但现在我收到了这个错误:
CS1002 :;预期
我知道为什么我的上述尝试不起作用?
答案 0 :(得分:3)
因为您已经在C#代码块中(由if条件语句打开)。如果您想将js /纯文本与剃刀中的C#代码混合使用,请使用@:
前缀
如果您尝试为操作方法生成相对网址,则应考虑使用Url.Action
方法。
<script type="text/javascript">
var url = '@Url.Action("Login","Account")';
@if (Request.IsAuthenticated)
{
@:url = '@Url.Action("GetLayers","Account")';
}
</script>
@:
告诉剃刀以下表达式应该被视为非代码,而是纯文本
与使用<text>
标记
@if (!Request.IsAuthenticated)
{
<text>url = '@Url.Action("Index")'</text>;
}
您可以使用三元运算符
将其转换为单行<script type="text/javascript">
var url = '@(Request.IsAuthenticated ? Url.Action("GetLayers","Account")
: Url.Action("Login","Account"))';
console.log(url);
</script>