0

Ajax 呼び出しの動作に一貫性がありません。

コントローラ...

public JsonResult checkWwid(string wwid)
    {
        EMPLOYEE employee = db.EMPLOYEES.SingleOrDefault(e => e.ID == wwid.ToUpper());
        if (employee != null)
        {
            return Json(employee, JsonRequestBehavior.AllowGet);
        }

        employee = new EMPLOYEE();
        employee.ID = "Unknown";
        employee.NAME = "Unknown";
        employee.ORGANIZATION_ID = "Unknown";
        employee.WORK_SITE_ID = "Unknown";

        return Json(employee, JsonRequestBehavior.AllowGet);
    }

ユーザーが認識されていない従業員 ID を入力すると、すべての値が「不明」の従業員オブジェクトが返されます。これはうまくいきます。ただし、入力された従業員 ID がデータベースの結果と一致する場合、従業員の Json オブジェクトが正常にビューに返されているにもかかわらず、何らかの理由で「else」条件に到達しません。

意見...

$('#Wwid').change(function () {

    $("#wwid_alert").hide();

    var selectedWwid = $(this).val();

    $.getJSON('@Url.Action("checkWwid")', { wwid: selectedWwid }, function (employee) {
        alert(employee.NAME);

        if (employee.ID == 'Unknown') {
            alert(employee.NAME);
            $("#wwid_alert").show();
            $("#wwid_alert").text("This WWID is not in the database; you will not be able to sucessfully submit this form.");

        } else { // This is not working even though I am getting a JSON result.

            alert(employee.NAME);
            $("#wwid_alert").show();
            $("#wwid_alert").text(employee.NAME);
        }

    });

});

デバッグを通じて、Json の結果がビューに返されていることがわかりました。これと同じアルゴリズムを別のアプリケーション (まったく同じデータベースを使用するアプリケーション) で使用しましたが、問題なく動作します。これを解決する方法がわかりません。提案や推奨事項は非常に高く評価されます。ありがとうございました。

4

2 に答える 2

1

こんにちはあなたはまたこのようにあなたのjson値を得ることができますそれは以下です

 $.ajax({
            url: "/City/State",
            dataType: 'json',
            data: { countryId: countryID },
            success: function (data) {
                alert(data);
                $("#stateID").empty();
                $("#stateID").append("<option value='0'>--Select State--</option>");
                $.each(data, function (index, optiondata) {
                    alert(optiondata.StateName);
                    $("#stateID").append("<option value='" + optiondata.ID + "'>" + optiondata.StateName + "</option>");
                });
            },
            error: function () {
                alert('Faild To Retrieve states.');
            }

        });

これを試してみてくださいこれはあなたを助けると思います

于 2012-10-04T05:18:20.070 に答える
0

今は恥ずかしいです。完全にデバッグしていませんでした。Jsonの結果が返されているのは、コントローラーがビューに制御を戻したからだと思いました。しかし、Firebug でデバッグした後、Http 500 エラーが発生していることに気付きました。おそらく、ASP.NET の組み込み Json シリアライザーによって Entity Framework オブジェクトがシリアル化されている方法が原因でした。

EF オブジェクトを Json の結果として送信するのではなく、新しいオブジェクトをインスタンス化し、結果に必要なプロパティのみを割り当てました。

将来、他の誰かが問題を解決するのを手伝ったかもしれません。:)

さらに、次の投稿が役に立ちました...

于 2012-10-04T02:49:28.167 に答える