0

私は単純なjQueryajaxメソッドを持っています:

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

dialogControllerで:

    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%)から来ていることを知りました。

ここで何が間違っている可能性があり、どうすればこれを防ぐことができますか?一部のメソッドでは、すべての引数をnull許容にし、メソッドの後半でnullをチェックしますが、リクエストが失敗するため、これは最適ではありません。

4

2 に答える 2

1

これは、送信するデータの問題である可能性が高いと思います。JSONオブジェクトを「生」(解析の種類なしで)投稿していることに気づきました。これが問題の原因である可能性があります。JSON.parseまたはJSON2.js(クロスブラウザ)などのサードパーティライブラリを使用して、問題が解決するかどうかを確認してください。

于 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 に答える