Как я могу создать кнопки и поднять трубку события от обратной передачи

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

, чтобы увидеть ненужные файлы:

git ls-files -ci --exclude-standard

[ 115] удалить ненужные файлы

git ls-files -ci --exclude-standard -z | xargs -0 git rm --cached

зафиксировать изменения

git commit -am "Removed unwanted files"

нажать изменения:

[ 113]

6
задан JohnIdol 10 April 2009 в 13:42
поделиться

6 ответов

b_Command Метод обработчика событий не выполняется, потому что на сообщении кнопки "Назад" не воссоздаются (так как они динамично сгенерированы). Необходимо воссоздать их каждый раз, когда страница воссоздается, но чтобы сделать это, необходимо явно кэшировать информацию где-нибудь в состоянии.

Если это ограниченная по объему страницей операция, самый легкий путь состоит в том, чтобы сохранить его в ViewState (как строки - если Вы начинаете загружать ViewState объектами, Вы будете видеть, что производительность понижается) так, чтобы можно было проверить его на следующей загрузке (или любом другом предыдущем событии) и воссоздать кнопки при перезагрузке страницы. Если операция ограничена по объему сессией, можно легко хранить объект (массив или безотносительно) на сессии и получить ее на следующей Загрузке (или Init) для воссоздавания средств управления.

Этот сценарий означает, что необходимо только сохранить некоторую информацию о кнопке в b_Command EventHandler вместо того, чтобы создать и добавить кнопки с тех пор, если Вы сделаете так, то Вы потеряете относительную информацию в следующей обратной передаче (как это происходит теперь).

таким образом, Ваш код стал бы чем-то как:

namespace CloudNavigation
{
    public partial class Test : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (IsPostBack)
            {
                this.recreateButtons();
            }
            else
            {
                // Execute heavy search 1 to generate buttons
                Button b = new Button();
                b.Text = "Selection 1";
                b.Command += new CommandEventHandler(b_Command);
                Panel1.Controls.Add(b);
                //store this stuff in ViewState for the very first time
            }
        }

        void b_Command(object sender, CommandEventArgs e)
        {
            //Execute heavy search 2 to generate new buttons
            //TODO: store data into ViewState or Session
            //and maybe create some new buttons
        }

        void recreateButtons()
        {
            //retrieve data from ViewState or Session and create all the buttons
            //wiring them up to eventHandler
        }
    }
}

Если Вы не хотите называть recreateButtons на загрузке страницы, можно сделать это на PreLoad или на событиях Init, я не вижу различия, так как Вы сможете получить доступ к Состоянию отображения/Переменным сеанса везде (на состоянии отображения Init, не применяется, но можно получить доступ к нему для воссоздавания динамических кнопок).

Кто-то будет ненавидеть это решение, но насколько я знаю, что единственным способом сохранить серверную сторону данных состояния является ViewState - Сессия - Страница. Передача или клиентские cookie.

5
ответ дан 17 December 2019 в 00:16
поделиться

Что происходит, когда обработка события возврата пытается найти управление этим, dosen't существует на наборе. Контроль Denis DynamicControlsPlaceholder http://www.denisbauer.com/ASPNETControls/DynamicControlsPlaceholder.aspx

Надежда это помогает Bruno Figueiredo http://www.brunofigueiredo.com

1
ответ дан 17 December 2019 в 00:16
поделиться

Кнопки должны быть созданы, прежде чем событие загрузки или состояние не будет обеспечено электричеством правильно. Воссоздайте свои кнопки в Init () вместо этого.

Что касается того, как сделать это, не повторно выполняя поиск, я предлагаю, чтобы Вы кэшировали результаты где-нибудь. Существование набора результатов в кэше состоит в том, как Ваш код кнопки в событии Init() будет знать, что это должно работать.

С другой стороны, Вы могли поместить кнопки на странице статически. Просто поместите достаточно там для обработки безотносительно поисковых возвратов. Если бы Вы думаете, что, возможно, которые были бы слишком многими объектами, то спросите Ваш сам это: Ваши пользователи действительно захотят отсортировать это много объектов? Возможно, необходимо считать подкачку страниц этими данными, в этом случае статические кнопки больше не являются столь же большим соглашением.

1
ответ дан 17 December 2019 в 00:16
поделиться

Вашему ASPX обеспечивали электричеством обработчик событий?

<asp:Button id="btnCommand" runat="server" onClick="b_Command" text="Submit" />
0
ответ дан 17 December 2019 в 00:16
поделиться

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

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

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

0
ответ дан 17 December 2019 в 00:16
поделиться

Вот образец с пользовательской обработкой состояния отображения (обратите внимание, что кнопки имеют EnableViewState = false):

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            // Execute heavy search 1 to generate buttons
            ButtonTexts = new ButtonState[] { 
                new ButtonState() { ID = "Btn1", Text = "Selection 1" } 
            };
        }
        AddButtons();
    }

    void b_Command(object sender, CommandEventArgs e)
    {
        TextBox1.Text = ((Button)sender).Text;

        // Execute heavy search 2 to generate new buttons
        ButtonTexts = new ButtonState[] { 
            new ButtonState() { ID = "Btn1", Text = "Selection 1" }, 
            new ButtonState() { ID = "Btn2", Text = "Selection 2" } 
        };
        AddButtons();
    }

    private void AddButtons()
    {
        Panel1.Controls.Clear();
        foreach (ButtonState buttonState in this.ButtonTexts)
        {
            Button b = new Button();
            b.EnableViewState = false;
            b.ID = buttonState.ID;
            b.Text = buttonState.Text;
            b.Command += new CommandEventHandler(b_Command);
            Panel1.Controls.Add(b);
        }
    }

    private ButtonState[] ButtonTexts
    {
        get
        {
            ButtonState[] list = ViewState["ButtonTexts"] as ButtonState[];
            if (list == null)
                ButtonTexts = new ButtonState[0];
            return list;
        }
        set { ViewState["ButtonTexts"] = value; }
    }

    [Serializable]
    class ButtonState
    {
        public string ID { get; set; }
        public string Text { get; set; }
    }
0
ответ дан 17 December 2019 в 00:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: