这条线
$('.current').val(page + ' of ' + @lastPage);
导致最后的括号用红色波浪线加下划线,上面写着“语法错误”,仅此而已。
然而,这条线
setPage(@lastPage);
工作得很好。
这到底是怎么回事?这导致我认为脚本完全停止工作,并且相当令人沮丧。
请问有人可以对这个问题有所了解吗?
这条线
$('.current').val(page + ' of ' + @lastPage);
导致最后的括号用红色波浪线加下划线,上面写着“语法错误”,仅此而已。
然而,这条线
setPage(@lastPage);
工作得很好。
这到底是怎么回事?这导致我认为脚本完全停止工作,并且相当令人沮丧。
请问有人可以对这个问题有所了解吗?
@lastPage 在 javascript 看到它时将是纯文本,因为它是在服务器端评估的。你可能想改变你的 jQuery 看起来更像这样:
$('.current').val(page + ' of @lastPage');
或者
$('.current').val(page + ' of ' + '@lastPage');
如果@lastPage 评估为 3,那么渲染的 JS 将如下所示
$('.current').val(page + ' of ' + 3);
您希望它看起来像这样
$('.current').val(page + ' of 3');
或者
$('.current').val(page + ' of ' + '3');
您认为 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 就已经完成并消失了。您的上下文现在位于客户端(浏览器)中,并且您的服务器已经完成了您针对它所需要的任何请求。