0

ノックアウト テンプレート バインディングを使用して質問のリストをバインドしようとしています。データとテンプレートのバインドに成功しました。しかし、次のボタンクリックイベントで、viewmodelをコントローラーに送信しようとしていますが、コントローラーにnull値を与えています

私のjqueryコードはこのようなものです

        $(document).ready(function () {
          $.ajax({
               type: "GET",
                contentType: "application/json",
                url: "/Render/LoadSurveyQuestions?sg=" + getUrlVars()["g"] + "&stg=" +      getUrlVars()["sig"],
                success: function (result) {
                var lstQns = JSON.parse(result);
                viewmodel = ko.mapping.fromJS(lstQns);
                ko.applyBindings(viewmodel, document.getElementById("tblQuestions"));
             }
           });

        $("#btnNext").click(function () { 
              $.ajax({
                     async: true,
                     cache: false,
                     type: 'post',
                     url: "/Render/SaveSurveyQuestionOptions", 
                     data: ko.toJSON(viewmodel),
                     success: function (result) {
                        }
                      }); 
                 });
                });



             function getUrlVars() {
                     var vars = {};
                     var parts = window.location.href.replace(/[?&]+([^=&]+)=([^&]*)/gi, function (m, key, value) {
                        vars[key] = value;
                         });
                  return vars;
                         }

コントローラーはこんな感じ

        [HttpPost]
        public void SaveSurveyQuestionOptions(List<Question> listOfQuestions)
         {
             if (listOfQuestions.Count > 0)
             {
               Question objQuestion = new Question();
                osurveymanager.InsertQuestionAnswers(objQuestion); 

              }
         }  


Here i am getting listOfQuestions as null value

助けてください よろしくお願いします

4

1 に答える 1

0

問題は、クライアント側から JSON 文字列を送信していることです。

$("#btnNext").click(function () { 
    $.ajax({
     async: true,
     cache: false,
     type: 'post',
     url: "/Render/SaveSurveyQuestionOptions", 
     data: ko.toJSON(viewmodel),   //toJSON converts your viewModel to JSON string
     success: function (result) {
              }
 }); 

したがって、サーバー側の文字列変数でそれを受け入れる必要があるため、コントローラーのアクションは次のようになります。

    [HttpPost]
    public void SaveSurveyQuestionOptions(string listOfQuestions)
    {
         var Questions = JsonConvert.DeserializeObject(listOfQuestions);
         //Now here Questions varibale contains the list Of question passed.. 
         //from the client side
    }  

これを試してみて、それが役立つかどうか教えてください!

于 2013-04-03T15:43:51.100 に答える