我遇到了一个问题,我试图在一些使用Razor的javascript中创建一个OData URL。运行时页面显示错误。
以下是示例:
var personId = 123;
var oDataUrl = "@Url.Content("~/OData/People")(" + personId + ")";
预期结果是:
var oDataUrl = "/OData/People(123)";
但Razor希望调用Url.Content的结果是一个函数。
我使用一个单独的变量解决了这个问题,但想知道是否有不同的方式。
示例解决方法:
var personId = 123;
var baseUrl = "@Url.Content("~/OData/People")";
var oDataUrl = baseUrl + "(" + personId + ")";
解决方法是可以接受的,但我不知道我是否遗漏了某些东西。
我已尝试使用@:和< text>< / text> - 任何可以使这个工作的人?
答案 0 :(得分:2)
问题是,就Razor而言,“@ Url.Content(...)(...)”是一个完全有效的C#表达式。所以它看到“(@”在“@ Url.Content(...)之后”并将其视为C#表达式的一部分。你应该在“@()”中包装“Url.Content()”调用(注意额外的parens),这会让Razor更加困惑:)。
例如,如果你有一个方法“Foo”,它返回一个Func< int,string>代表,你可能想打电话:
@Foo(123)(456)
Razor无法区分这些情况,所以我们提供了“@()”逃生舱,以便根据您的意愿弯曲Razor。)。
这是一个应该有效的固定示例:
var personId = 123;
var oDataUrl = "@(Url.Content("~/OData/People"))(" + personId + ")";
希望有所帮助!
答案 1 :(得分:0)
您发布的第一个块看起来不正确,因为它中没有未加引号的双引号:
var oDataUrl = "@Url.Content("~/OData/People")(" + personId + ")";
你的意思是:
var oDataUrl = "@Url.Content(\"~/OData/People\")(" + personId + ")\"";
or
var oDataUrl = "@Url.Content(\"~/OData/People(" + personId + ")\"";