1

这条线

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

导致最后的括号用红色波浪线加下划线,上面写着“语法错误”,仅此而已。

然而,这条线

setPage(@lastPage);

工作得很好。

这到底是怎么回事?这导致我认为脚本完全停止工作,并且相当令人沮丧。

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

4

2 回答 2

5

@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');
于 2013-06-06T23:05:30.340 回答
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 就已经完成并消失了。您的上下文现在位于客户端(浏览器)中,并且您的服务器已经完成了您针对它所需要的任何请求。

于 2013-06-06T23:16:21.893 回答