2015-08-17 2 views
0

Так у меня есть a тег с OnClick:Получение нескольких значений из C# в JavaScript

<a onclick="join(4);">Join</a> 

Теперь, когда a тег щелкнул, он называет этот код в таком порядке:

JavaScript функции:

function join(gymID) { 
     PageMethods.getGymInformation(gymID); 
    } 

C метод #:

[WebMethod] 
public gymData getGymInformation(string gymID) 
{ 
    gyms gym = new gyms(); 
    DataTable dt = gym.getNewGymInfo(System.Convert.ToInt32(gymID)); 
    DataRow dr = dt.Rows[0]; 

    return new gymData { name = dr["name"].ToString(), strength = dr["strength"].ToString(), speed = dr["speed"].ToString(), defence = dr["defence"].ToString()}; 
} 

public DataTable getNewGymInfo(int gymID) 
{ 
    // This returns a datatable with 1 row 
    return gymTableApapter.getNewGymInfo(gymID); 
} 

[Serializable] 
public sealed class gymData 
{ 
    public string name { get; set; } 
    public string strength { get; set; } 
    public string speed { get; set; } 
    public string defence { get; set; } 
} 

Как вы можете видеть, JavaScript функцию присоединиться вызывает метод C#, который затем извлекает DataTable с 1 строкой, а затем, используя пользовательский тип данных он заполняет строки с данными, которые будут возвращены ..

Теперь я пытаясь выяснить, как получить информацию, полученную из метода C#, которая будет извлечена в функции объединения JavaScript?

Это их способ сделать это?

ответ

1

Добавить обратные вызовы успеха/ошибки в вашем JavaScript-коде. Это может выглядеть примерно так:

PageMethods.getGymInformation(gymID, onSuccess, onError); 

function onSuccess (result) { 
    // result contains the returned value of the method 
} 

function onError (result) { 
    // result contains information about the error 
} 

Тогда в функции onSuccess вы бы возвращаемое значение метода на стороне сервера (типа gymData) в переменной result. В этот момент вы можете делать все, что вам нужно для этого, в своем клиентском коде.

Если функции не имеют каких-либо применимое повторного использования, вы даже можете просто добавить их в линию:

PageMethods.getGymInformation(gymID, 
    function (result) { 
     // success 
    }, function (result) { 
     // error 
    }); 
+0

Как бы извлечь его из результата? Будет ли это просто result.name, result.strength и так далее? – mogorilla

+0

@mogorilla: Скорее всего, если инфраструктура не обертывает его в закрывающий объект или каким-то другим способом его модификации. Однако вы можете подтвердить это в отладчике. В отладчике вашего браузера установите точку останова в функции обратного вызова. При остановке в этой точке останова проверьте значение времени выполнения 'result'. – David

+0

Глядя на консоль, при нажатии на тег привязки я получаю сообщение об ошибке «PageMethods не определен»? – mogorilla

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