2013-04-03 4 views
0

Я пытаюсь связать список вопросов, используя привязку шаблона нокаута. Я добился успеха в получении данных и привязки шаблонов. но на следующем событии нажатия кнопки я пытаюсь отправить ViewModel к контроллеру, но он дает значение нуля в контроллереpost viewmodel с использованием ajax для ошибки контроллера

Моего 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 

пожалуйста, помогите мне заранее спасибо

ответ

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 
    } 

Попробуйте это и дайте мне знать, если это помогает!

Смежные вопросы