Json contentType: прерывает Jquery POST для контроллера MVC - PullRequest
0 голосов
/ 19 августа 2010

Я пытался заполнить поле описания, когда был выбран раскрывающийся список. Я получил это работает, но я не мог использовать JSON Content Type. Это работает

<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: я получаю нулевое значение, возвращенное моему контроллеру. Я также попробовал

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

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

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

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

Ответы [ 2 ]

2 голосов
/ 19 августа 2010
$.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 голосов
/ 21 июня 2012

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

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: Введение в ASP.NET MVC 3 (Preview 1)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...