在具有公共js文件的不同cshtml文件中定义javascript变量的正确方法是什么?

在具有公共js文件的不同cshtml文件中定义javascript变量的正确方法是什么?,javascript,html,asp.net-mvc,Javascript,Html,Asp.net Mvc,有一个cshtml文件,我们在其中将模型值存储在javascript变量中,如下所示 @model sampleVM; <script> var x = "@Model.x"; var y = "@Model.y"; </script> <script src="sample.js"></script> docready { var z = 5; alert(x+y+z); } 它是否会影响脚本解析时间,因为我们已经在多个cshtml文件中定义

有一个cshtml文件,我们在其中将模型值存储在javascript变量中,如下所示

@model sampleVM;
<script>
var x = "@Model.x";
var y = "@Model.y";
</script>
<script src="sample.js"></script>
docready
{
var z = 5;
alert(x+y+z);
}

它是否会影响脚本解析时间,因为我们已经在多个cshtml文件中定义了上述变量?有更好的方法吗?

您可以将x,y设置为窗口变量,并可以在sample.js文件中使用

@model sampleVM;
<script>
window.x = "@Model.x";
window.y = "@Model.y";
</script>
@model-sampleVM;
window.x=“@Model.x”;
window.y=“@Model.y”;
“更好的方法”并不是很客观,但我的观点如下: 我将完全摆脱cshtml中的内联脚本。为什么?如果您想使用rollup、webpack或当前的Js框架解析、lint、transfile或javascript代码,那么当javascript代码隐藏在cshtml文件中时,您将很难做到这一点。您的示例相当小,但是项目随着时间的推移变得越来越复杂,而且由于您的js已经混合了razor语法,您还可以在那里添加新的需求吗?然后,您将以js和cshtml文件中的javascript代码片段结束整个项目。所以:对我来说,这是一种代码气味

我要做的是: 在标记中使用模型:

<input type="hidden" name="xValue" id="xValue" value="@Model.x" />
<input type="hidden" name="yValue" id="yValue" value="@Model.y" />
然后,您的cshtml文件将直接引用该文件:

@section scripts {
    <script src="~/sample.js"></script>
}
@节脚本{
}

您可以封装它<代码>变量x=(函数(){return“@Model.x”;})(
@section scripts {
    <script src="~/sample.js"></script>
}