0

我有一个简单的 jQuery ajax 方法:

        var sendData = { personId: "@(Guid.Empty)"};
        $.ajax({
            type: "POST",
            url: "@(Url.Action("Dialog", "Dialog")",
            data: sendData;
        }).done(function (e) {
            $('#dialog').html(e);
            window.resizeDialog();
        });

在对话框控制器中:

    public ActionResult PersonInfo(Guid personId)
    {
         ....
    }

jQuery 会将 personId 作为 Guid 传递给控制器​​,控制器将完成它的工作并返回一个 PartialView 作为对话框。

这很好用,并且在一些拥有众多用户的大型项目中被大量使用。

但很少(每 10.000 次点击中大约 1 次)我的记录器会收到此异常:

22-8-2012 14:17:27 ERROR: The parameters dictionary contains a null entry for parameter 'personId' of non-nullable type 'System.Guid' for method 'System.Web.Mvc.ActionResult PersonInfo(System.Guid)' in 'Site.Controllers.DialogController'. An optional parameter must be a reference type, a nullable type, or be declared as an optional parameter.
Parameter name: parameters at System.Web.Mvc.ActionDescriptor.ExtractParameterFromDictionary(ParameterInfo parameterInfo, IDictionary`2 parameters, MethodInfo methodInfo)
at System.Web.Mvc.ReflectedActionDescriptor.<>c__DisplayClass1.b__0(ParameterInfo parameterInfo)
at System.Linq.Enumerable.WhereSelectArrayIterator`2.MoveNext()
at System.Linq.Buffer`1..ctor(IEnumerable`1 source)
at System.Linq.Enumerable.ToArray[TSource](IEnumerable`1 source)
at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters)
at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters)
at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass15.b__12()
at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation)
at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass15.<>c__DisplayClass17.b__14()
at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation)
at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass15.<>c__DisplayClass17.b__14()
at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters(ControllerContext controllerContext, IList`1 filters, ActionDescriptor actionDescriptor, IDictionary`2 parameters)
at System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName)

我尝试的是更改 $.ajax 方法的 DataType,但没有帮助。现在我发现大多数(不是全部)错误来自 IE8(90%)。

这里可能出了什么问题,我该如何防止这种情况?对于某些方法,我将所有参数设为可空,稍后我将在该方法中检查空,但这不是最优的,因为请求将失败。

4

2 回答 2

1

我会说这更有可能是您发送的数据的问题。我注意到您正在发布 JSON 对象“原始”(没有任何类型的解析),这可能是问题所在。尝试使用JSON.parse或JSON2.js (跨浏览器)等 3rd 方库,看看您的问题是否消失。

于 2012-08-22T14:32:22.193 回答
0

您忘记引用您的字符串,因此您的结果 javascript 如下所示:

var sendData = { personId: 00000000-0000-0000-0000-000000000000};

这将导致0或根本不起作用。尝试以下操作:

var sendData = { personId: "@(Guid.Empty)"};
于 2012-08-22T14:30:59.693 回答