Несерверные элементы управления и частичные обратные передачи

Я вставляю некоторые несерверные элементы управления (простые HTML-элементы управления) динамически в панель обновления с помощью jQuery.

Если я выполняю полную обратную передачу, я могу получить значения этих элементов управления, используя Request.Form, однако, если я делаю частичную обратную передачу, я не могу.

Должен ли я быть в состоянии получить значения элементов управления HTML во время частичной обратной передачи? Или только элементы управления с runat="server"?

Я использую не серверные элементы управления, так как я играю с Facebox и элементами управления загрузкой файлов... это не красиво:-|

2 ответа

Решение

Панель обновления не является эффективным способом сделать асинхронным.

Поскольку вы уже используете jQuery, добавьте веб-сервис (.asmx) в свой проект и нажмите на него. См. Рисунок 4 этой статьи: http://msdn.microsoft.com/en-us/magazine/cc163413.aspx

Request.Form создается из viewstate, к которому ваши элементы управления не будут добавлены.

Вы можете получить все значения любого элемента управления формы или элементов управления, которые вы хотите в Частичной обратной передаче. Это тривиальный ответ, но на первый взгляд интуитивно не очевидный. Может быть, поэтому ASP.net мертв.

Помните, что параметры

__doPostback(string controlId,string param)

являются строками, а методы ASP.net

Request.Params.Get("__EVENTTARGET"); // id
Request.Params.Get("__EVENTTARGET"); // parameter

возвращать строки

Поэтому простой ответ

  1. Создайте объект javascript с парами ключевых значений всех элементов формы, которые вы хотите отправить обратно в свой фрагмент.

  2. Стригируйте этот объект и передайте его как второй параметр вашего вызова __doPostBack.

На стороне сервера вы просто изменяете этот процесс, чтобы извлечь свой объект и все значения форм, которые вам нужны.

Например:

var strigifiedObject = JSON.stringify(myFormObject);
var id = "partialPostback";
__doPostBack(id, strigifiedObject);

... между тем на стороне сервера

string id = Request.Params.Get("__EVENTTARGET");
string param = Request.Params.Get("__EVENTARGUMENT");

if (id == "partialPostback") {
    List<MyObj> formVals = new JavaScriptSerializer().Deserialize<List<MyObj>>>(param);
}
Другие вопросы по тегам