2016-05-08 11 views
0

通常の質問の反対です。RazorのJavaScriptをLINQ式に埋め込む方法は?

特定のguidで認識されるコントロールにスコアを追加する機能があります。問題は、上限がRazorページのモデルに保存されていることです。ボタンのIDから取得したGUIDを使用して取得する必要があります。 Model.Answers.Single(=> .ID == HERE JS GUID BE).MAX
@

GUIDは$(呼び出し).ATTR( "ID")である。SUBSTR(3)

関数のコードは次のようになります。私は自分の人生のために文法を理解することはできません。

function adjustScore(invoker, delta) { 
    var target = $("#val" + $(invoker).attr("id").substr(3)); 
    var newValue = +target.html() + delta; 
    var max = @Model.Answers.Single(_=>_.Id == new Guid()).Max; 
    if (newValue < 0 || newValue >= max) 
    newValue = 0; 
    target.html(newValue); 
} 
+0

レイザーコードはサーバー側であり、ビューがクライアントに送信される前に評価されます。その時点でjavascript変数は存在しません。 –

+0

Razorコードでボタンが生成された場合、JavaScriptで使用できる制限が生成されることもあります。 –

答えて

1

サーバでカミソリコードが実行され、カミソリが生成された出力をブラウザに送信します。あなたのjavascriptはクライアント側で実行されます。要するに、試したときにそれらを混ぜることはできません。

できることは、あなたのコントローラのアクションメソッドにサーバーコードを入れ、このメソッドを呼び出して必要なjavascript変数値を渡して使用することです。

あなたは小数点値として最大値を返しますあなたの HomeControllerGetMaxアクションメソッドを持っていると仮定すると
function adjustScore(invoker, delta) { 
    var target = $("#val" + $(invoker).attr("id").substr(3)); 
    var newValue = +target.html() + delta; 

    $.get("@Url.Action("GetMax","Home")",function(max){ 
     if (newValue < 0 || newValue >= max) 
      newValue = 0; 

     target.html(newValue); 
    }); 

} 

public decimal GetMax() 
{ 
// query your data and return a decimal 
} 

私はGetMaxメソッドへの正しい相対パスを生成するUrl.Actionヘルパーメソッドを使用しています。コードが外部のjavascriptファイルの内部にある場合は、this postに記載されている方法を使用してください。

関連する問題