2017-05-12 48 views
0

私はさまざまな質問と回答を見てきましたが、私は部分的にしか成功していません。JSONからMVCへのコントローラの投稿

ビューこのJSONを渡している。

{JsonInput: [["208-01", "003158"]], JobNumber: "test"} 

$.ajax({ 
    type: "POST", 
    url: "/Dash/SavePickups", 
    contentType: 'application/json', 
    dataType: "json", 
    data: JSON.stringify({ 
     JsonInput: final, 
     JobNumber:"test" 
     }), 

JSON文字列を上記JSON文字列の一部のみがJsonInputに渡されるダッシュ/ SavePickups

[System.Web.Http.Route("Dash/SavePickups/{JsonInput}")] 
    public JsonResult SavePickups(object[][] JsonInput) 
    { 
     var FailResult = new { Success = "False", Message = "Error" }; 
     var SuccessResult = new { Success = "True", Message = "Pickups Scheduled Successfully." }; 

     return Json(SuccessResult, JsonRequestBehavior.AllowGet); 

    } 

/ATコントローラに送られます。デバッグにおいて のOBJアレイ208から01と003158.

がなぜクロムネットワークPOSTにコントローラに送信JSON文字列のその部分を見ることができ、JOBNUMBERが含まれていないと私は、JsonInputオブジェクトを参照..

+1

あなたの問題は、あなたがあなたにJSONをデシリアライズしようとして入力したデータです。次のようなモデルを作成したいと考えています。public list slist {get; set;} public string jobno {get; set;} - そしてそのモデルをSavePickupsメソッドへの入力として受け入れます。これはあなたのメソッドにpost'dのすべての値を取得する必要があります。 – ThomW

答えて

4

maccetturaの回答を続ける - 問題はJSONをオブジェクトに逆シリアル化することです。あなたの指定されたJSONは としてフォーマットされている{JsonInput:[ "1234"、 "5667"]、JobNo: "テスト"}にデシリアライズしないであろう

List<string> , String 

の一つの可能​​なデータ構造を有する

public class SavePickupsModel 
{ 
    public List<string> JsonInput {get; set;} 
    public string JobNo {get; set; } 
} 
: 'sqaure' オブジェクトは、このような

object [][] 

ように私はこのようになりますあなたのJSONのためのモデルを作るお勧めします

は、その後、あなたの方法への入力として、そのモデルを使用します。

[HttpPost] 
[System.Web.Http.Route("Dash/SavePickups/{JsonInput}")] 
public JsonResult SavePickups(SavePickupsModel JsonInput) 
{ 
    var FailResult = new { Success = "False", Message = "Error" }; 
    var SuccessResult = new { Success = "True", Message = "Pickups Scheduled Successfully." }; 

    return Json(SuccessResult, JsonRequestBehavior.AllowGet); 

} 
+0

[HttpPost]は必須ではありませんが、正しいデータ型が間違っています。 –

1

私はまた、アクション(object[][] JsonInput)のためのあなたのパラメータは右の私には見えていないことを指摘う[HttpPost]属性

[HttpPost] 
[System.Web.Http.Route("Dash/SavePickups/{JsonInput}")] 
public JsonResult SavePickups(object[][] JsonInput) 
{ 

} 

であなたのコントローラをタグ付けすることによって開始します。おそらく、JSONはそのオブジェクト型にデシリアライズしません。

関連する問題