2015-08-12 4 views
0

Вот мой код в javascript.неопределенный параметр объекта в jQuery

$('#destination_table').delegate('.destination', 'change', function() { 
    var url = "/Transactions/getDestination"; 
    var getIndex = $(this).closest('tr').index(); 
    alert(getIndex); 
    name = $(this).val(); 
    $.ajax({ 
     type: "GET", 
     url: url, 
     data: { name: name }, 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     success: function (data) { 
      console.log(data); // returns [Object] with length 1 
      alert(data.geo); //alerts undefined. 
      $('.destination_type' + getIndex).val(data.type); //not showing any 
      $('.destination_geo' + getIndex).val(data.geo); //not showing 

     }, 
     error: function (err) { 
      // alert(err); 
     } 

    }); 
}); 

Мои консоли отображает объект из ASP.NET MVC5 контроллера return Json(dest, JsonRequestBehavior.AllowGet);, но когда я вызывать некоторые параметр/поле в объекте (data.type) в success это приводит, как определено.

из консоли в моем клиенте выглядит так

0: Object 
    DestinationID: 7 
    dateAdded: "/Date(1444406400000)/" 
    dateLastModified: "/Date(1444406400000)/" 
    geo: "USA" 
    name: "China" 
    type: "international" 
    visaRequired: true 
    winterDateFrom: "/Date(1444406400000)/" 
    winterDateTo: "/Date(1444406400000)/" 
    __proto__: Object 
    length: 1 

дополнительной информации.

[HttpGet] 
public ActionResult getDestination(Destination destination) 
{ 
// var dest = db.Destination.Find(destination.DestinationID); 
var dest = db.Destination.Where(x => x.name == destination.name).ToList(); 
return Json(dest, JsonRequestBehavior.AllowGet); 
} 

, когда я использую функцию Find Linq я не имею никакого problem.but, когда я изменить его Linq запрос на Where. он начал проблему ...

ответ

0

Поскольку контроллер возвращает список, который в свою очередь является массивом на стороне клиента, вам необходимо получить доступ к его свойства, используя его index: -

data[0].geo; 
$('.destination_type' + getIndex).val(data[0].type); 
$('.destination_geo' + getIndex).val(data[0].geo); 

и так далее.

Если вам нужен только первый объект, то лучше вернуть один объект с сервера с помощью метода First или FirstOrDefault.

var dest = db.Destination.First(x => x.name == destination.name); 

После внесения этих изменений можно получить доступ к свойствам непосредственно, как это: -

$('.destination_type' + getIndex).val(data.type); 
$('.destination_geo' + getIndex).val(data.geo); 

Но если вы хотите связать несколько значений, то вы можете использовать for петлю на стороне клиента, и пусть сервер боковой код остается таким, какой он есть.

+0

спасибо, что отвечает на мой вопрос. но есть ли способ, которым я могу использовать 'Where', где я не использую индексацию в jquery ?. –

+0

@YuukkaLimson - Да, вы можете использовать 'First' или' FirstOrDefault' (в этом случае он вернет null для отсутствия соответствия) вместо 'Where', как я упоминал в своем ответе. –

+0

@YuukkaLimson или 'FirstOrDefault' для случая, когда запрос не может ничего вернуть – Grundy

Смежные вопросы