mvc controllerにjson配列を渡す

4042 ワード

このテーマに対して私は最も適切な方法を見つけられなかったが、一時的に問題を回避できる方法を見つけただけだ.ここまで送って、各位の大侠をとても望んで、弟にいくつかの考えをあげてこの問題を解決することができます.
 
最初のニーズ
このような機能を実現したいと思っていました
ここの
 
var titles = [{ title: "ONE",List: ["1", "2"] },

                       { title: "TWO", List: ["2","8"] },

                       { title: "THREE", List: ["3","6"] },

                       { title: "FOUR", List: ["4","7"] },

                       { title: "FIVE",List:["4","5"]}];



 



     function sendAjax() {

         var array = titles[0].List;//   ,        

        //var data = $.toJSON(array);



         $.ajax({

             url: "/Store/GetData",

             type: "POST",

             dataType: 'json',

             data: {listVar:array,limit:10},

             contentType: "application/json",

             success:DataArrange

             }

         );



}


 
バックグラウンドのプログラム
 
        [HttpPost()]

        public ActionResult GetHotStores(List<String> listVar,int? limit)

  {

    //        

      var results=*****;

    return JSON("results",JsonRequestBehavior.AllowGet);

  }


これは私の最初のプログラムで、最初、全体のプログラムがどうしても役に立たないことを発見して(バックグラウンドに伝わることができます)、1回のデバッグ、発見時にjsonデータを文字列化していないで、それからjqueryToJSONを使って文字列化を行って、文字列化した後、limitは認識することができて、しかし配列フォーマットのlistVarに対してずっと伝わる時null、ネット上で資料を探します.再処理配列が見つかった場合は,属性を加えてデータを前処理する必要がある.プロパティをカスタマイズしました
 
 
 
        public class JsonFilter : ActionFilterAttribute

        {

            public string Param { get; set; }

            public Type JsonDataType { get; set; }

            public override void OnActionExecuting(ActionExecutingContext filterContext)

            {

                if (filterContext.HttpContext.Request.ContentType.Contains("application/json"))

                {

                    string inputContent;

                    using (var sr = new StreamReader(filterContext.HttpContext.Request.InputStream))

                    {

                        inputContent = sr.ReadToEnd();

                    }

                    var jss = new JavaScriptSerializer();

                    var result = jss.Deserialize(inputContent, JsonDataType);

                    filterContext.ActionParameters[Param] = result;

                }

            }

        }


 
バックグラウンドプログラムの前に付けると、バックグラウンドプログラムは
 
 
        [HttpPost()]

        [JsonFilter(Param = "listVar", JsonDataType = typeof(List<String>))]

        public ActionResult GetData(List<String> listVar,int? limit)

  {

    //        

      var results=*****;

    return JSON("results",JsonRequestBehavior.AllowGet);

  }


このとき、デバッグを続け、ブレークポイントを属性内に設定すると、データが入ってきたことがわかりますが、正確に解析できません.多方面のデバッグを経て、最終的にプログラムを以下の形式にする必要があることがわかりました.まとめると、配列を伝えると、配列を伝えるだけで、形式は["213"、"23434"]で、他のパラメータ名を付けないでください.このように書くとJavaScriptSerializerは解析できません.プロジェクトが急いでいるので、私はまずしばらく調整しなければなりません.プログラムをバックグラウンドに変更しなければなりません.
 
 
        [HttpPost()]

        [JsonFilter(Param = "listVar", JsonDataType = typeof(List<String>))]

        public ActionResult GetData(List<String> listVar)

  {

    //        

      var results=*****;

    return JSON("results",JsonRequestBehavior.AllowGet);

  }


limitパラメータを削除して前段に対して
 
 
 
     function sendAjax() {

         var array = titles[0].List;//   ,        

         var data = $.toJSON(array);//     





$.ajax({

url: "/Store/GetData",

type: "POST",

dataType: 'json',

data: data,//        

contentType: "application/json",

success:DataArrange

}

);



}


 
このような調整を経てすべて正常になった.しかし、改善すべき点がたくさんあるような気がしますが、これ以上研究する時間はありません.本人のレベルはまだ初学で,足りないところがあれば皆さんに指摘してもらいたい.