MVC / jQuery - 可以在jQuery中使用Razor变量,但不能分配给jQuery变量?

时间:2013-06-06 23:03:25

标签: jquery asp.net-mvc razor

这一行

$('.current').val(page + ' of ' + @lastPage);

导致最后一个括号被加下划线的红色标语“语法错误”,仅此而已。

然而,这条线

setPage(@lastPage);

完美无缺。

那到底是什么?这导致我视图中的脚本完全停止工作,而且非常令人沮丧。

请问有人对这个问题有所了解吗?

2 个答案:

答案 0 :(得分:5)

当javascript看到它时,@ ptPage将成为纯文本,因为它是在服务器端进行评估的。您可能希望将jQuery更改为更像这样:

$('.current').val(page + ' of @lastPage');

OR

$('.current').val(page + ' of ' + '@lastPage');

如果@lastPage评估为3,则呈现的JS看起来像这样

$('.current').val(page + ' of ' + 3);

您希望它看起来像这样

$('.current').val(page + ' of 3');

OR

$('.current').val(page + ' of ' + '3');

答案 1 :(得分:0)

您认为Javascript和(C#)Razor语法在同一环境中同时协同工作(例如HTML和Javascript如何正常工作)。他们没有。将它想象为“Razor为jQuery变量分配值”也是不正确的。

这里要理解的关键是Razor语法将在服务器中进行评估,然后再将响应发送回浏览器(例如,HTML页面)。 Javascript将在浏览器中进行评估,之后收到服务器的响应。所以它基本上是两个环境。一种思考方式是Razor为浏览器中的Javascript环境做好准备。

比如说,你的Razor代码是这样的:

@{ 
    var id = "foo";
}
$('#@id').show();

你的Javascript甚至不会注意到它中有Razor,因为当它到达它时,它看起来像这样:

$('#foo').show();

这也是Javascript无法分配给Razor的原因;仅仅因为当Javascript“轮到”评估时,Razor就已经完成并且已经完成了。您的上下文现在位于客户端(浏览器),并且您的服务器已经完成,无论您的请求是什么都需要。