2012-01-26 8 views
1

Razorを使用していくつかのjavascriptでOData URLを作成しようとしているところで問題が発生しました。私はそれを実行すると、ページがエラーを表示します。ここで Razorを使用してカッコでURLを構築する

は一例です:

var personId = 123;  
var oDataUrl = "@Url.Content("~/OData/People")(" + personId + ")"; 

期待される結果は次のとおりです。

var oDataUrl = "/OData/People(123)"; 

しかし、カミソリはUrl.Contentへの呼び出しの結果が関数であることを期待しています。

別の変数を使ってこの問題を回避しましたが、別の方法があるかどうか疑問に思っていました。

例の回避策:

var personId = 123; 
var baseUrl = "@Url.Content("~/OData/People")"; 
var oDataUrl = baseUrl + "(" + personId + ")"; 

回避策が受け入れ可能であるが、私は何かが欠けていた場合、私は知りませんでした。

@:と<のテキスト> </text > - これは誰でも利用できますか?

答えて

1

問題は、Razorに関する限り、「@ Url.Content(...)(...)」は完全に有効なC#式です。 "@ Url.Content(...)"の後ろにある "(")を見て、それをC#式の一部と見なしています。 "Url.Content()"呼び出しを "@()"で囲む必要がありますparens)、それははるかにRazorのための混乱を少なくするでしょう:)。例えば

あなたが呼び出したいかもしれないのFunc < int型、文字列>デリゲートを、返却方法「フー」があった場合、:

@Foo(123)(456) 

をカミソリは、これらのケースの違いを伝えることができません、私たちはあなたの意志にかみそりを曲げるために "@()"エスケープハッチを提供します:)。助け

var personId = 123;  
var oDataUrl = "@(Url.Content("~/OData/People"))(" + personId + ")"; 

希望を:

はここで動作するはずの固定例です!

+0

はい、それは、私が探していた解決策です!ありがとう! –

0

それはそれでエスケープされていない二重引用符を持っているとして、あなたが投稿、右を見ていない最初のブロック:

var oDataUrl = "@Url.Content(\"~/OData/People\")(" + personId + ")\""; 
or 
var oDataUrl = "@Url.Content(\"~/OData/People(" + personId + ")\""; 

var oDataUrl = "@Url.Content("~/OData/People")(" + personId + ")"; 

はあなたのような何かを意味しましたか?

+0

コードはJazascriptを生成するRazorテンプレートです。これは、var oDataUrl = '@ Url.Content( "〜/ OData/People")(' + personId + ')'として書き直すことができます。同じ結果が得られます。 –

関連する問題