我对如何混合剃刀和js感到很困惑。这是我坚持的当前功能:
<script type="text/javascript">
var data = [];
@foreach (var r in Model.rows)
{
data.push([ @r.UnixTime * 1000, @r.Value ]);
}
如果我可以使用<c#></c#>
声明c#代码而其他所有内容都是JS代码 - 这就是我所追求的:
<script type="text/javascript">
var data = [];
<c#>@foreach (var r in Model.rows) {</c#>
data.push([ <c#>@r.UnixTime</c#> * 1000, <c#>@r.Value</c#> ]);
<c#>}</c#>
实现这一目标的最佳方法是什么?
答案 0 :(得分:309)
使用<text>
:
<script type="text/javascript">
var data = [];
@foreach (var r in Model.rows)
{
<text>
data.push([ @r.UnixTime * 1000, @r.Value ]);
</text>
}
</script>
答案 1 :(得分:78)
在代码块(例如@foreach
)内,您需要标记标记(或者,在本例中为Javascript)with @:
or the <text>
tag。
在标记上下文中,您需要使用代码块(@{ ... }
或@if
,...)来包围代码。
答案 2 :(得分:47)
你也可以简单地使用
<script type="text/javascript">
var data = [];
@foreach (var r in Model.rows)
{
@:data.push([ @r.UnixTime * 1000, @r.Value ]);
}
</script>
注意 @:
答案 3 :(得分:11)
永远不要混用更多语言。
<script type="text/javascript">
var data = @Json.Encode(Model); // !!!! export data !!!!
for(var prop in data){
console.log( prop + " "+ data[prop]);
}
答案 4 :(得分:2)
一种从视图中分离javascript的非常规方法,但是仍然使用razor来制作Scripts.cshtml
文件,然后将混合的javascript / razor放在此处。
Index.cshtml
<div id="Result">
</div>
<button id="btnLoad">Click me</button>
@section scripts
{
@Html.Partial("Scripts")
}
Scripts.cshtml
<script type="text/javascript">
var url = "@Url.Action("Index", "Home")";
$(document).ready(function() {
$("#btnLoad").click(function() {
$.ajax({
type: "POST",
url: url ,
data: {someParameter: "some value"},
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(msg) {
$("#Result").text(msg.d);
}
});
});
});
</script>
答案 5 :(得分:0)
对于带有JavaScript的两个cshtml代码,您都可以使用demo3@example.nl:foo
标签
答案 6 :(得分:-1)
在JS脚本中将您的Razor代码包装在@ {}中,并注意只使用@ 有时它不起作用:
function hideSurveyReminder() {
@Session["_isSurveyPassed"] = true;
}
这将产生
function hideSurveyReminder() {
False = true;
}
浏览器中的=(