2013-08-08 3 views
1

У меня есть следующий WebMethod: -передавая параметр из WebMethod в Jquery

 [WebMethod(EnableSession = true)] 
    public static void OpenReport(string reportName) 
    { 
     Report report = reportsBll.GetReports().FirstOrDefault(x => reportQuestion != null && x.Id == reportQuestion.ReportId); 

     if (report != null) reportUrl = report.Url; 
    } 

Сейчас я хочу передать report.Url этому методу Jquery: -

$('.ReportButton').click(function() { 
    var args = { reportName : '' }; 

    $.ajax({ 
     type: "POST", 
     url: "ReportsByQuestionsDetails.aspx/OpenReport", 
     data: JSON.stringify(args), 
     contentType: "application/json;charset=utf-8;", 
     success: function (data) { 
      alert('success'); 
      document.location.href = reportUrl; 
     }, 
     error: function() { 
     } 
    }); 
}); 

Как я могу передать reportUrl из WebMethod в JQuery?

Спасибо за вашу помощь и время

+3

Знаете ли вы, что означает, что 'void' ключевое слово в вашем C Метод #? –

+0

Да, я должен изменить его, чтобы вернуть URL-адрес, однако я не знаю, как передать его JQuery – Johann

+0

Попробуйте проверить значение 'data' в вашей функции успеха jQuery после изменения вашего веб-метода. –

ответ

1

Необходимо изменить метод страницы, чтобы фактически вернуть somethin г, вы в настоящее время не возвращая ничего через тип void возвращения, изменить его к этому:

[WebMethod(EnableSession = true)] 
public static string OpenReport(string reportName) 
{ 
    Report report = reportsBll.GetReports().FirstOrDefault(x => reportQuestion != null && x.Id == reportQuestion.ReportId); 

    if (report != null) 
    { 
     return report.Url; 
    } 

    return String.Empty; 
} 

UPDATE: Microsoft добавила родительский контейнер для ответов JSON в ASP.NET AJAX 3.5 в целях борьбы с потенциальной кросс- атаки на скрипт сайта (XSS); поэтому вы success обратного вызова должен быть таким:

success: function (data) { 
    alert('success'); 
    document.location.href = data.d; 
} 

Есть способы смягчить это, как описано в Never worry about ASP.NET AJAX’s .d again

+0

Вы все равно ничего не возвращаете, если 'report' равно null. –

+0

Уже пробовал, не работает. Отчет не является нулевым – Johann

+0

@ Frederik.L - Спасибо, что поймали этот обновленный ответ. –

5

Вы должны вернутьсяstring в методе C#:

[WebMethod(EnableSession = true)] 
public static string OpenReport(string reportName) 
{ 
    string reportUrl = string.Empty; 
    Report report = reportsBll.GetReports().FirstOrDefault(x => reportQuestion != null && x.Id == reportQuestion.ReportId); 

    if (report != null) reportUrl = report.Url; 

    return reportUrl; 
} 

Затем в АЯКС возвратного URL вы можете сделать (вы можете запасной вариант для если отчет равен нулю, но):

success: function (data) { 
    location.href = data; 
}, 
+0

Я уже пробовал, что не работает – Johann

+0

@Johann Если вы отлаживаете «WebMethod», ударяет ли точка останова? Является ли отчет ** определенно ** не нулевым? – mattytommo

+0

да, я получаю URL-адрес, просто отлаживается. Перенаправление на http: // localhost/myapp/[object Object] – Johann