2015-04-28 2 views
0

У меня есть функция на стороне сервера, которая заполняет dropdownlist. Я назвал эту функцию с помощью кнопки стороне клиента щелкните PageMethods в Javascript так:Как вызвать функцию на стороне сервера C# с эффектом на стороне клиента с Javascript в ASP.net

<asp:ScriptManager ID="smMain" runat="server" EnablePageMethods="true" /> 
<asp:Button runat="server" ID="SearchButton" Text="Search" OnClientClick="SearchButtonClick();return false;"/> 
<asp:DropDownList runat="server" ID="SearchCityDropDownList" Width="100px"/> 

И

function SearchButtonClick() { 
     PageMethods.SearchSearchButtonActivity(onSucess, onError); 
    } 
    function onSucess(result) { 
     alert(result); 
    } 
    function onError(result) { 
     alert('Cannot process your request at the moment, please try later.'); 
    } 

стороне сервера Функция:

[WebMethod] 
public static string SearchButtonActivity() 
{ 
    string result = "Everything is OK!"; 
    foreach (string value in getCityList()) 
    { 
     SearchCityDropDownList.Items.Add(new ListItem(value)); 
    } 
    return result; 
} 

При выполнении этого кода и нажмите на кнопку просто показать сообщение "Everything is OK!" и

dropdownlist все еще пуст.

Так помочь мне решить эту проблему, я думаю, что это сообщение Опубликовано: проблема, потому что, когда я отладки кода, items of dropdownlist are full but don't show that.

Спасибо

+0

так вы получаете "Все в порядке!" как ответ, но раскрывающийся список остается пустым, не так ли? –

+0

где вы «привязывали» 'dropdownlist' ?? – BNN

+0

Да @HarveySpecter –

ответ

3

Это не будет работать, как вы его установки. Вы могли бы сделать панель обновления, но это было бы излишним, ИМО. Проблема в том, что вы делаете вызов AJAX, который просто возвращается на сервер и возвращается клиенту. Страница и, таким образом, элемент управления, никогда не возвращаются на сервер, чтобы получить повторную визуализацию.

Вместо этого вам нужно связать результат с обратным вызовом onsuccess в раскрывающемся списке. Таким образом, ваш метод веб необходимо изменить:

[WebMethod] 
public static string SearchButtonActivity() 
{ 
    var result = new List<string>(); 
    foreach (string value in getCityList()) 
    { 
     result.Add(value); 
    } 
    return result; 
} 

И тогда ваш OnSuccess стороне клиента обратного вызова должен обрабатывать его:

function SearchButtonClick() { 
     PageMethods.SearchSearchButtonActivity(onSucess, onError); 
    } 
    function onSucess(result) { 
     SearchCityDropDownList.options.length = 0; 
     for (var i==0;i<result.length;i++) { 
     AddOption(result[i], i); 
     } 
    } 
    function onError(result) { 
     alert('Cannot process your request at the moment, please try later.'); 
    } 

function AddOption(text, value) { 
    var option = document.createElement('option'); 
    option.value = value; 
    option.innerHTML = text; 
    SearchCityDropDownList.options.add(option); 
} 

Вы можете получить значение выбранного, на стороне сервера в этой моде:

string selectedVal = Request[SearchCityDropDownList.UniqueID] 

Благодаря этому так опубликовать для руководства: Getting the value of a DropDownList after client side javascript modification

+0

Моя большая проблема заключается в том, что я хочу обрабатывать его внутри функций на стороне сервера :( –

+1

Будут ли результаты любой обратной передачи видеть эти динамические записи в списке? Из того, что я помню, если они не находятся в в представлении, затем вы не можете ничего с ними сделать на стороне сервера позже. Не проблема, если страница не отправляет данные обратно. – Klors

+0

Итак, вы действительно хотите использовать панель обновления, а затем – JasonWilczak

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