MVC3 JSON Ajax ошибка - PullRequest
       2

MVC3 JSON Ajax ошибка

0 голосов
/ 16 марта 2012

Я пытаюсь заставить ajax отправлять данные в формате JSON с частичного представления.Я получаю System.ArgumentException: недопустимый примитив JSON: не определено.Когда я оцениваю объект в браузере, данные содержат int и две строки.Может кто-нибудь сказать мне, что я делаю неправильно?

Частичное представление

@model FTD.Models.FTDAccountExtended
@using (Html.BeginForm()) {
<fieldset>
<legend>Update Policy Number</legend>
@Html.HiddenFor(m => m.account.ftd_accountsid)
@Html.HiddenFor(m => m.OldPolicyNumber)
@Html.TextBoxFor(m => m.account.ftd_policyno)
<input type="button" value="update" id="update" />
</fieldset>
}

<script type="text/javascript">
 $(document).ready(function () {
     $("#update").click(function () {
         var myUrl = '@Url.Content("~/")' + '/Maintenance/UpdatePolicyNumber';
         var data = [{ 'ClientNumber': parseInt($("#account_ftd_accountsid").val()), 'OldPolicyNumber': $("#OldPolicyNumber").val(), 'NewPolicyNumber': $("#account_ftd_policyno").val()}];
         $.ajax({
             url: myUrl,
             type: 'POST',
             data: data,
             contentType: 'application/json; charset=utf-8',
             success: function (data) {
                 alert(data.message);
             },
             error: function (errMsg) {
                 alert("Error", errMsg);
             }
         });
     });
 });

Метод контроллера:

public ActionResult UpdatePolicyNumber(int ClientNumber, string OldPolicyNumber, string NewPolicyNumber)
{
    var message = string.Format("UpdatePolicyNumber CN:{0} OP:{1} NP:{2}", ClientNumber, OldPolicyNumber, NewPolicyNumber);
    if (_log.IsDebugEnabled)
        _log.Debug(message);
    if (!string.IsNullOrEmpty(NewPolicyNumber) && ClientNumber > 0)
    {
        _entities = new CloseFTD_Entities();
        _entities.UpdatePolicyNumber(ClientNumber, OldPolicyNumber, NewPolicyNumber, User.Identity.Name);

     }
     return Json
        (
           new
           {
               message = message
           },
           JsonRequestBehavior.AllowGet
         );
}

Ответы [ 3 ]

1 голос
/ 16 марта 2012

Ваша проблема здесь

var data = [{ 'ClientNumber': parseInt($("#account_ftd_accountsid").val()), 'OldPolicyNumber': $("#OldPolicyNumber").val(), 'NewPolicyNumber': $("#account_ftd_policyno").val()}];

Вы строите массив - но ваш контроллер использует прямые значения, поэтому просто удалите [] скобки:

var data = { 'ClientNumber': parseInt($("#account_ftd_accountsid").val()), 'OldPolicyNumber': $("#OldPolicyNumber").val(), 'NewPolicyNumber': $("#account_ftd_policyno").val()};

Это должноработа.

1 голос
/ 16 марта 2012

Я бы просто попытался опубликовать данные в виде объекта java-скрипта (как уже упоминал Марк) и удалите атрибут типа контента.

1 голос
/ 16 марта 2012
 success: function (data) {
                 alert(data.success);
             },

это не должно быть

 success: function (data) {
                 alert(data.message);
             },
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...