如何从ajax请求中解析对象(及其元素)

时间:2013-05-09 20:19:27

标签: asp.net-mvc jquery asp.net-mvc-4

这是我的问题。我正在制作ajax请求以从控制器获取对象。对象(或其他东西)被带回来,但我不知道如何访问被带回的对象的属性。该对象的类型为“Address”,因此具有Address.Address1,Address.City等属性。这是我的代码:单击一个按钮后,

function showEditAddress(addressid) {

    $.get("/Website/Accommodation/AddressGet",
        { guid: addressid.toString() },

        function(data) {

             //Get values from variable 'data' such as described above
             //and append to form 'dialog'

            $("#dialog").dialog({
                // autoOpen: false,
                show: {
                    effect: "explode",
                    duration: 250
                },
                hide: {
                    effect: "explode",
                    duration: 250
                },
                buttons: {
                    "Save": {
                        text: "Save",
                        class: "",
                        click: function () {
                             //save form 
                            $(this).dialog("close");

                        }
                    },
                    "Cancel": {
                        text: "Cancel",
                        class: "",
                        click: function () {
                            $(this).dialog("close");
                        }
                    }
                },
                modal: true
            });
        });       
    }

控制器操作:

        public Address AddressGet(string guid)
    {
        Guid g = new Guid(guid);
        return _iCoreRepository.Addresses.Where(p => p.AddressID == g).SingleOrDefault();
    }

任何帮助将不胜感激!!!谢谢!!!

2 个答案:

答案 0 :(得分:2)

何塞非常简单。你已经回答了这个问题。要获取Address属性的值,您只需在data前加一个点并输入de property name。像这样:

//(....)
function(data) {

    //Get values from variable 'data' such as described above
    //and append to form 'dialog'

    //show address id.
    alert(data.AddressID);

请记住,javascript区分大小写,因此您需要在地址ID中使用大写字母AID,就像在C#中一样。

在控制器中,您需要将最后一行替换为以下内容:

var address = _iCoreRepository.Addresses.Where(p => p.AddressID == g).SingleOrDefault();
return Json(address, JsonRequestBehavior.AllowGet);

该方法必须返回JsonResult。 Json方法在将数据响应给客户端之前,以json格式序列化对象,在本例中为address。

如果你需要Json方法接受IEnumerables,比如List<>或数组。在javascript中,您的数据对象将是一个长度属性,并将通过使用索引器来访问每个元素:

data[0].AddressID.

答案 1 :(得分:1)

您可以尝试返回Address

,而不是只返回JsonResult个对象
public ActionResult AddressGet(string guid)
{
    Guid g = new Guid(guid);
    var address = _iCoreRepository.Addresses.Where(p => p.AddressID == g).SingleOrDefault();
    return Json(address, JsonRequestBehavior.AllowGet);
}

然后在你的jquery中,返回的data是你的地址对象,你可以访问它们在C#类中出现的字段:

function showEditAddress(addressid) {

    $.get("/Website/Accommodation/AddressGet",
        { guid: addressid.toString() },

        function(data) {

            //Get values from variable 'data' such as described above
            //and append to form 'dialog'
            //Access it like: data.Address1, data.City etc...

        });       
    }
}