【问题标题】:MVC3 JSON Ajax errorMVC3 JSON Ajax 错误
【发布时间】:2012-03-16 09:24:49
【问题描述】:

我正在尝试制作一个 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
         );
}

【问题讨论】:

标签: c# jquery json asp.net-mvc-3


【解决方案1】:

我会尝试将数据发布为 java 脚本对象(正如 Marc 上面提到的) 并删除内容类型属性。

【讨论】:

  • 使用 Marcs 更改并删除内容类型非常感谢。
【解决方案2】:
 success: function (data) {
                 alert(data.success);
             },

不应该这样吗

 success: function (data) {
                 alert(data.message);
             },

【讨论】:

  • 你说得对,那是不正确的。但是实际上并没有触发控制器,错误在于我正在传递的数据中。
【解决方案3】:

你的问题来了

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()};

应该可以的。

【讨论】:

  • 尝试删除 [] 括号,但仍然收到 System.ArgumentException: Invalid JSON primitive: ClientNumber.
猜你喜欢
  • 2012-05-13
  • 2023-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多