2013-07-15 4 views
2

У меня есть простой код JavaScript, в котором я хочу получить объект от контроллера и проанализировать его в скрипте, но в скрипте у меня нет доступа к какому-либо свойству объекта.

Мой объект (в контроллере):

public class userData 
{ 
    public string firstName { get; set; } 
    public string lastName { get; set; } 
    public string state { get; set; } 
    public bool success { get; set; } 
} 

Сценарий:

function load() 
{ 
    var sender = { 
     userNo : $("#userNo").val(), 
    } 
    $.ajax({ 
     type : "POST", 
     url : "testGetUser", 
     data : sender, 
     success:function(data) 
      { 
       if(1) 
       { 
        $("#section #result0").html(data.firstName); 
        $("#section #result1").html(data.lastName); 
        $("#section #result2").html(data.state); 
        $("#section").slideDown().delay(1000).slideUp(); 
       } 
      } 
    }); 
} 

Контроллер:

[HttpPost] 
public userData testGetUser(long userNo) 
{ 
    userData result = new userData(); 

    result.firstName = Session["firstName"].ToString(); 
    result.lastName = Session["lastName"].ToString(); 
    result.state = Session["country"].ToString(); 
    result.success = true; 

    return result; 
} 
+0

Во-первых, поскольку вы пытаетесь получить только данные пользователя, вы должны использовать запрос GET вместо запроса POST. –

+1

Во-вторых, сериализуйте модель для JSON: http://stackoverflow.com/questions/6201529/turn-c-sharp-object-into-a-json-string-in-net-4 –

ответ

5

В с ontroller, используйте:

[HttpPost] 
public JsonResult testGetUser(long userNo) 
{ 
    userData result = new userData(); 

    result.firstName = Session["firstName"].ToString(); 
    result.lastName = Session["lastName"].ToString(); 
    result.state = Session["country"].ToString(); 
    result.success = true; 

    return Json(result); 
} 

Кажется, что вы не используете переменную userNo, так что лучше использовать запрос GET, как это:

public JsonResult testGetUser(/*remove parameter*/) 
{ 
    userData result = new userData(); 

    result.firstName = Session["firstName"].ToString(); 
    result.lastName = Session["lastName"].ToString(); 
    result.state = Session["country"].ToString(); 
    result.success = true; 

    return Json(result, JsonRequestBehavior.AllowGet); 
} 

JavaScript теперь хочет быть таким:

function load() 
{ 
    $.ajax({ 
     type : "GET", 
     url : "testGetUser", 
     success:function(data) { 
      $("#section #result0").html(data.firstName); 
      $("#section #result1").html(data.lastName); 
      $("#section #result2").html(data.state); 
      $("#section").slideDown().delay(1000).slideUp(); 
     } 
    }); 
} 
+0

Еще одна сторона-примечание: поскольку элемент id на странице должен быть уникальным, плохой практикой передавать более одного идентификатора на селектор, прямой '$ (" # result0 ")' будет быстрее в синтаксическом селекторе и быстрее в поиске узлов. – Tommi

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