ASP.NET MVC 3 - Json结果行为不一致

时间:2012-10-03 21:05:42

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

我与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与数据库中的结果匹配时,由于某种原因,无法达到“else”条件 - 尽管员工Json对象已成功返回到视图。

查看...

$('#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结果正在返回到View。我在另一个应用程序(使用完全相同的数据库)中使用了相同的算法,并且工作正常。我对如何解决这个问题感到茫然。任何建议或建议都会受到重视。谢谢。

2 个答案:

答案 0 :(得分: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.');
            }

        });

尝试这个我认为这会对你有所帮助

答案 1 :(得分:0)

现在我很尴尬;我没有完全调试过。我认为这是因为控制器已将控制权返回给视图,即返回了Json结果。但是,在Firebug中调试之后,我发现我收到了Http 500错误,可能是由于ASP.NET内置的Json序列化程序对Entity Framework对象进行序列化的方式。

我没有将EF对象作为Json结果发送,而是实例化了一个新对象,并仅为结果分配了所需的属性。

也许我已经帮助别人解决了一个问题。 :)

此外,the following post helped...