2017-03-03 15 views
1

parameterを使用しているときに、私のMVCアプリケーションで、ajaxのコールが動作していません(コントローラが呼び出されない)。 ajaxコールとcontrollerの両方でパラメータを削除するとうまく動作します。

//コード:

$('#btnGw').click(function (e) {    

       $.post("../api/cuews/", { openId: "3" }, function (data) { 

        // data to manipulate for filter values 

       });    

      }); 

//コントローラ

[HttpPost] 
    public string Post(string openId) 
    { 
     string json = openId; 

     return json; 
    } 

しようとした追加Json.Stringify、

$.post("../api/cuews/", { openId: Json.Stringify("3") }, function (data) { 

        // data to manipulate for filter values 

       }); 

$.post("../api/cuews/", Json.Stringify({ openId: "3" }), function (data) { 

        // data to manipulate for filter values 

       }); 

しかし結果は同じです。

エラー:(コンソールで)

POST http://localhost/api/cuews/ 404 (Not Found) 

iはパラメータで間違って何をしているのですか?

FYI、

同じ構造パラメータと$.getのために動作します。

+0

404を取得しているので、私はあなたのAPIコールアドレスが正しいとは思っていません。コントローラとルーティングはどのように見えますか? –

+0

@ KallumTanton '$ .get()'でうまくいくと思います。 – iamCR

+0

どのjQueryメソッドがGETで機能しますか? –

答えて

1

は、必要とされる特性を持つモデルを作成します

  1. 、これを試してみてください。
  2. モデルをパラメータとして渡します。
  3. AJAXから渡されたパラメータがModelにあるものと同じ(TEXT)であることを確認してください。

例:これらの状態でのparams

public class TestModel 
{ 
    public int ID { get; set; } 
    public string Desc { get;set; } 
} 

$.ajax({ 
    url: '../api/Test/', 
    type: 'POST', 
    dataType: 'json', 
    data: JSON.stringify({ Id: "1", Desc : "Name" }), 
    contentType: "application/json; charset=utf-8", 
    success: function (data) { 
        alert("Success!!!") 
       }, 
    error: function (xhrequest, ErrorText, thrownError) { 
         alert("Error") 
       } 
}); 

AJAXはうまく動作します。ちょうど周りの仕事。

-1

あなたがしようとしないのはなぜ:

$.ajax({ 
        type: "POST", 
        contentType: "application/json;charset=utf-8",//type of data to be send 
        url: youraddressgoeshere 
        dataType: "json",//type of data to be received 
        data: JSON.stringify(model),//data to be send 
        async: false, 
        success: function (response) { 
         //some code 
        }, 
        error: function (xhr, status, error) {  
         alert(xhr.responseText); 
        } 
     }); 

あなたがオブジェクト全体に値にJSON.stringifyを変換していません。オブジェクト全体を変換して、サーバサイドのメソッドに渡してみてください。また

あなたはASP.NET MVCで作業している場合App_StartフォルダにRouteConfigに行き、あなたがEXのURL

を定義しているか確認してください。

routes.MapRoute(
       name: "Default", 
       url: "{controller}/{action}/{id}", 
       defaults: new { controller = "Home", action = "Login", id = UrlParameter.Optional } 
      ); 

通知を{controller}/{action}/{id}ここには{id}があります。したがって、私があなたの場合は、サーバー側コントローラの方法でpublic string Post(string openId)public string Post(string id)に変更しようとします。

+0

何を試してみませんか?それがうまくいく理由を説明してください。 – Justinas

+0

@Justinas私は説明で答えを編集していました。あなただけがdownvotingする前にもう少し待っていたら。 – Arbaaz

+0

@Arbaaz同じことを試してみました。それでも動作しませんでした。 – iamCR

0

お客様の問題は、$ _POSTを使用してパラメータを送信し、public string Post(string openId)$_GETに渡されるリクエストパラメータであることです。このパラメータの割り当てを関数の内部に移動してみてください。

+0

私は質問を更新しました。あなたはそれを言うのですか?はいの場合は、同じです。 did not work – iamCR

+0

コントローラーパラメーターはうまく見えます - OPは 'HttpPost'デコレーターを正しく使いました。 –

関連する問題