2016-10-31 13 views
0

これは簡単すぎるので、stackoverflowを試してみてください。多くの似たような質問を見つけ、それを通して読んだ。これらの例を使用して解決策は見つかりませんでした。ここに私のコードは、誰も助けることができますか?ASP.NET MVCコントローラにパラメータを渡していないAjaxリクエスト

function testAjax() { 
return $.ajax({ 
    type: "GET", 
    url: '@Url.Action("Nodes","Competence", new { userId = Sven });', 
    contentType: "application/json;charset=utf-8", 
    dataType: "json" 
}); 
} 

var promise = testAjax(); 

promise.success(function (data) { 
    var dataConverted = JSON.stringify(data); 
    $('#tree').treeview({ data: dataConverted, multiSelect: true }); 
}); 

ASP.NET MVC方式

public JsonResult Nodes(string userId) 
    { 
     var temp = userId; 
     var list = new List<Node>(); 
     list.Add(new Node("Test1")); 
     list.Add(new Node("Test2")); 
     list.Add(new Node("Test3")); 

     return Json(list, JsonRequestBehavior.AllowGet); 
    } 

EDIT: 私はハロウィーンの夜に狂っオンとしていた直前に、私は新しいセッションで試してみる考え出しました。それはちょうどキャッシングの問題だったことが分かります。助けてくれてありがとうございました

+0

はちょうどあなたがデバッグしているだろう「POST」であるべきであり、コントローラ機能は、到達可能ですか? –

+0

あなたはどのようなエラーメッセージを表示しましたか? –

+0

あなたのコードは絶対に上手です。私はちょうどコピーし、ローカルプロジェクトに貼り付け、それはうまくいきました(userId paramはあなたが "Test"を送った値を持っていました) – Shyju

答えて

0

これはGET動詞なので、クエリーストリング値として渡すのが最も簡単です。これはまた、RESTfulデザインとよく似ています。

たとえば、あなたは、データプロパティを削除することができ

@Url.Action("Nodes","Competence", new { userId = id });

@Url.Action("Nodes","Competence")

を交換してください。これにより?userId = valueOfIdがURLに追加され、userIdが正しく入力された状態でアクションに正しくマッピングされます。

更新

@ freedomn-mが述べたように:

ビューは、サーバー側に構築されている場合、このURLを生成します。 のパラメータが決して変更されない場合、パラメータは変更されませんが、 のパラメータは変更されない可能性は比較的低いです。クエリ文字列にする場合は、実行時にURL パラメータを追加する必要があります。

これは完全に正確です。あなたの正確な実装を知らないと、私は前提を作ることしかできません。しかし技術的には、関数内でAjax呼び出しをラップして、userIdを渡してその関数内でURLを生成するか、関数内でURL生成を実行して関数外でURL生成を行うことができます。

これは、ajaxリクエストを実行する関数が1つだけ必要であり、userIdを取得して(場合によってはURLを生成する)別の関数を持つことができ、それをajax関数に渡すことができます。 userIdをどのように保存するかはまったくあなた次第ですが、私は、data attributesを調べて、html要素にデータを格納するためのかなり明確な方法を提案しています。

+0

これは、ビューがサーバー側で構築されたときにURLを生成します。パラメータが決して変更されない場合、パラメータは変更されない可能性は比較的低いです。この場合、実行時にクエリー文字列にURLパラメータを追加する必要があります。 –

+0

あなたは絶対に正しい@ freedomn-mです。私は単にその例を取り上げ、それを働かせることを目指しました。私はあなたのコメントに基づいてさらにいくつかの情報を追加します。ありがとう – Corporalis

+0

どのようにパラメータにアクセスできますか?この方法:HttpContext.Request.Params.Get( "userId")? – Sven

0

サーバーがJSONコンテンツのリクエストを期待していない可能性があるため、ajax呼び出しのパラメータcontentTypeを削除してみてください。そのデフォルト値は "application/x-www-form-urlencoded; charset = UTF-8"であり、大部分の場合は問題ありません。

0

それのタイプは

return $.ajax({ 
    type: "POST", 
    url: '@Url.Action("Nodes","Competence")', 
    data: { userId: "Test" }, 
    contentType: "application/json;charset=utf-8", 
    dataType: "json" 
}); 
+0

なぜ説明を追加できますか? –

+0

いくつかのデータを投稿しているためです。そのため、リクエストタイプの投稿が必要になります。ユーザーIDをURLに追加するだけでGETが機能します。 –

関連する問題