2010-08-19 2 views
0

Я пытаюсь заполнить поле описания, когда выпадало раскрывающееся меню. Я получил его работу, но я не мог использовать Json Content Type. Это работаетJson contentType: разрывает JQuery POST на контроллер MVC

<script type="text/javascript"> 
    $(document).ready(function() { 
     $("#ddl_id").change(function() { 
      var test = $("#ddl_id").val(); 
      $.ajax({ 
       type: "POST", 
       url: "<%= Url.Action("GetVal") %>", 
       data: {id: test}, 
       //contentType: "text/plain", 
       dataType: "json", 
       success: function(result) { 
        $("#serial").val(result); 
       }, 
       error: function(e) { 
        alert(e); 
       } 
      }); 
     }); 
    }); 

</script> 

Но когда я раскомментировал contentType: я получаю null, возвращенный моему контроллеру. Я также попытался

contentType: "application/json; charset=utf-8", 

Это мой контроллер

[HttpPost] 
    public JsonResult GetVal(string id) 
    {....... 

Почему это, что, когда у меня есть CONTENTTYPE я получаю нуль прошло? И какой лучший способ кодировать данные Json? Я совершенно новый в этом, и я не мог найти прямого объяснения.

ответ

2
$.ajax({ 
     type: "POST", 
     url: "<%= Url.Action("GetVal") %>", 
     data: JSON.stringify({id: test}), 
     contentType: "application/json", 
     dataType: "json", 
     success: function(result) { 
      $("#serial").val(result); 
     }, 
     error: function(e) { 
      alert(e); 
     } 
}); 

Один из подводных камней с помощью этой функции является то, что задания JSON CONTENTTYPE фактически не вызывает JQuery для JSON-кодирования ваш запрос. Вы должны сделать это вручную или он будет сериализован до application/x-www-form-urlencoded.

Вам нужен json2 и/или родной JSON.

+0

Спасибо за ответ, но, я устал, что ты дал мне, и я все еще не может получить Null в контроллере. Сообщение имеет {"ID": "string"}, но на сервере все еще отображается нуль. – Peter

0

На стороне сервера используйте объект, чтобы получить значение параметров. как:

public class sealed MyClass{ 
    public Int32 ID{get;set;} 
    // other properties here... 
} 

в использовании метода действия как

[HttpPost] 
public ActionResult MyAction(MyClass mycls){ 
    // here your can get the property,like 
    mycls.ID; 
} 

вы можете прочитать читать блог MSDN: Introducing ASP.NET MVC 3 (Preview 1)

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