ASP.NET Ajax - кнопки «постбэкинг», но функциональность не происходит - PullRequest
0 голосов
/ 12 апреля 2011

Вот в чем дело Я добавил в веб-часть кнопку, которая сохраняет некоторые поля в MS-Excel.

var btn = new Button { Text = title, CssClass = css };
btn.Click += (sender,args)=>action();
Container.Controls.Add(btn);

Этот код находится внутри метода OnInit () в WebPart. action - это Action, который делает вещи, в данном случае:

Something.FillExcel(MyData);
Something.SaveExcel();

Итак, что происходит, я нажимаю кнопку, она действует как обычная частичная обратная передача и абсолютно ничего не делает. Я подумал, что это может быть что-то в коде Fill / Save, а затем попытался вызвать ошибку, просто чтобы посмотреть, получится ли она. Кажется, что событие click никогда не срабатывает, или, если оно происходит, оно не запускает мой код (?).

Вот HTML, на всякий случай:

<input type="submit" name="ctl00$m$g_b4af4370_c016_4712_9d60_fc8ca077a068$ctl359" value="Enviar Formulário" onclick="javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(&quot;ctl00$m$g_b4af4370_c016_4712_9d60_fc8ca077a068$ctl359&quot;, &quot;&quot;, true, &quot;&quot;, &quot;&quot;, false, false))" class="button" />

Что может происходить?

Заранее спасибо!

РЕДАКТИРОВАТЬ: После того, как Cos Каллис ответил, я поместил свой код в OnLoad () вместо OnInit (). Вот новый код:

protected override void OnLoad(EventArgs e)
    {
        base.OnLoad(e);
        var btn = new Button { Text = title, CssClass = css };
        btn.Click += new EventHandler((sender,args)=>{
            if (myform.Page.IsPostBack)
            {
                excel.FillExcel(); excel.SaveFile();
            }
        });
        container.Controls.Add(btn);            
    }

Я получаю ошибку JavaScript: SCRIPT5022: Sys.WebForms.PageRequestManagerServerErrorException: The given key was not present in the dictionary.

Ответы [ 2 ]

1 голос
/ 12 апреля 2011

Поскольку вы пытаетесь воздействовать на INIT, а не на загрузку, данные еще не были прикреплены к серверу.

Вы должны найти этот обзор жизненного цикла веб-запроса в ASP.NET полезным: http://msdn.microsoft.com/en-us/library/ms178472.aspx.

Вот соответствующая выдержка:

Инициализация

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

Нагрузка

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

Во время инициализации элемент управления «существует», но еще не был загружен данными из обратной передачи. Если вы переместите свой код в «OnLoad», вы должны добиться желаемых результатов. (Не забудьте обернуть это в "if(IsPostback)")

Приветствия

CEC

// добавлен ресурс: после публикации моего ответа я подумал, что вам может пригодиться и эта статья: http://encosia.com/2007/10/24/are-you-making-these-3-common-aspnet-ajax-mistakes/

0 голосов
/ 14 апреля 2011

Извините, ребята, обнаружили, что это ошибка внутри FillExcel().Я думал, что получу эту желтую страницу asp, но вместо этого она дает мне ошибку сценария.

Возможно, еще одна распространенная ошибка для новичков в ajax / jquery / sharepoint.

Я принимаю ответ Кос Каллиса как ответ, потому что он ответил на все мои вопросы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...