ASP.NET Ajax Рендеринг HTML с клиента или сервера? - PullRequest
0 голосов
/ 01 октября 2009

Я использую html <select> (не серверный элемент управления) в моей веб-форме asp.net, которую я связал с помощью asp.net ajax с помощью вызова веб-службы. В моем веб-сервисе я в основном делаю это:

Private Function GetStores() As String
  dim stores as DataTable = GetStores()
  dim html as new StringBuilder
  for each row as DataRow in stores.Rows
    html.append("<option>")
    html.append(row("store"))
    html.append("</option>")
  next
  return html.tostring()
End Function

Из моего js я бы просто использовал:

$get("myddl").innerHTML = "<select>" + result + "</select>";

Причина, по которой я это делаю, заключается в том, что сервер быстрее создает необходимый HTML. Если бы я заполнил ddl со стороны клиента, просто возвращая dataTable, то я думаю, что это займет немного больше времени, в зависимости от строк.

Также обратите внимание, что я делаю это только один раз при загрузке страницы.

Что вы думаете об этом? Это плохо? Если да, то почему?

Ответы [ 2 ]

0 голосов
/ 24 ноября 2010

Ваш серверный метод, похоже, не фильтрует этот список параметров, поэтому, если вы просто отображаете список выбора, почему бы не отобразить его с начальной страницей, а не сделать последующий запрос.

Что касается производительности, то отправка данных в формате JSON менее подробна, а значит меньше килобайт. Если в раскрывающемся списке мы говорим о 50 элементах, вы вряд ли заметите затраты на создание этого с использованием JavaScript по сравнению с выполнением этого на сервере.

Кроме того, существует известная ошибка в некоторых версиях Internet Explorer, которая означает, что вам нужно заменить весь выбор, а не просто обновить параметры - на случай, если вы столкнетесь с ним!

0 голосов
/ 01 октября 2009

Я думаю, что это плохо, потому что я видел много проблем из разных браузеров, возникающих, когда вы просто устанавливаете innerHTML элемента.

Если вы попытаетесь создать элементы, просто поместив HTML-разметку для них в некоторые элементы управления innerHTML, HTML-DOM не всегда обновляется. Это может привести к тому, что ваши значения не будут возвращены при отправке формы, или даже сделать невозможным обращение к элементам с помощью javascript.

Вместо этого вы должны сделать так, чтобы WebService возвращал данные JSON или XML с нужной вам информацией (только именем магазина). А затем используйте javascript для динамического создания и добавления параметров в раскрывающийся список.

Примерно так будет хорошо работать:

// do your AJAX call and pass back the responseText to this function (For a JSON response)
function FillDDL(text)
{
    eval("var data="+text);
    var ddl=document.getElementById('ddlID');

    for( var i=0; i<data.items.count; i++ )
    {
        var option = document.createElement("option");
        option.text=data.items[i];
        option.value=data.items[i]; //IE wont automatically copy the text to the value
        ddl.options.add(option,0); //FF will error if you dont tell it where to add the option
    }
}

И если вы не знакомы с JSON, этот формат используется с кодом выше:

{items:['name','name2','name3']}

Просто верните строку, подобную приведенной выше, из вашего WebService, и все будет готово.

...