Я работаю над приложением ASP.Net и работаю над добавлением Ajax для ускорения работы в определенных областях. Первая область, на которой я концентрируюсь, - это область посещаемости, где учителя сообщают о посещаемости (и некоторых других данных) о детях. Это должно быть быстро.
Я создал систему с двумя элементами управления, в которой пользователь нажимает на значок, а через Javascript и Jquery я выскакиваю второй элемент управления. Затем я использую __doPostBack (), чтобы обновить всплывающий элемент управления для загрузки всех соответствующих данных.
Вот небольшой фрагмент видео, чтобы показать, как это работает: http://www.screencast.com/users/cyberjared/folders/Jing/media/32ef7c22-fe82-4b60-a74a-9a37ab625f1f (: 21 и игнорировать звуковой фон).
Это медленнее, чем мне хотелось бы, на 2-3 секунды в Firefox и Chrome для каждого «всплывающего окна», но в IE это совершенно неработоспособно, легко занимая 7–8 секунд при каждом всплывающем окне и загрузке. И это не учитывает время, необходимое для сохранения данных после их изменения.
Вот javascript, который обрабатывает всплывающее окно:
function showAttendMenu(callingControl, guid) {
var myPnl = $get('" + this.MyPnl.ClientID + @"')
if(myPnl) {
var displayIDFld = $get('" + this.AttendanceFld.ClientID + @"');
var myStyle = myPnl.style;
if(myStyle.display == 'block' && (guid== '' || guid == displayIDFld.value)) {
myStyle.display = 'none';
} else {
// Get a reference to the PageRequestManager.
var prm = Sys.WebForms.PageRequestManager.getInstance();
// Unblock the form when a partial postback ends.
prm.add_endRequest(function() {
$('#" + this.MyPnl.ClientID + @"').unblock({ fadeOut: 0});
});
var domEl = Sys.UI.DomElement;
//Move it into position
var loc = domEl.getLocation(callingControl);
var width = domEl.getBounds(callingControl).width;
domEl.setLocation(myPnl, loc.x + width, loc.y - 200);
//Show it and block it until we finish loading the data
myStyle.display = 'block';
$('#" + this.MyPnl.ClientID + @"').block({ message: null, overlayCSS: { backgroundColor:'#fff', opacity: '0.7'} });
//Load the data
if(guid != '') { displayIDFld.value = guid; }
__doPostBack('" + UpdatePanel1.ClientID + @"','');
}
}}
Во-первых, я не понимаю, почему __doPostBack () вводит такую задержку в IE. Если я возьму это и вызову prm.add_endRequest, это ОЧЕНЬ быстро, так как никакой обратной передачи не происходит.
Во-вторых, мне нужен способ открыть этот элемент управления и обновить данные, чтобы он оставался интерактивным. Я не женат на UpdatePanel, но я не смог понять, как это сделать с помощью метода веб-службы / статической страницы. Как видите, этот элемент управления загружается много раз на одной и той же странице, поэтому размер страницы и скорость загрузки являются проблемой.
Буду признателен за любые идеи?
Edit: то же самое в IE 6 или 7. Я думаю, что это связано с обработкой IE UpdatePanel, потому что тот же код гораздо быстрее в FF и Chrome.