Serialize Composed Func?

Это работает нормально:

    Func<string, string> func1 = s => s + "func";
    ViewState["function"] = func1;

Однако это не так:

    Func<string, string> func1 = s => s + "func";
    Func<string, string> func2 = s => func1(s);

    ViewState["function"] = func2;

Выдает исключительную сериализацию во время выполнения: Введите «MyProjectName._Default + <> c__DisplayClass3» в сборке «MyProjectName, Version = 1.0. 0.0, Culture = нейтральный, PublicKeyToken = null 'не помечен как сериализуемый.

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

Чем больше я использую ASP.NET, тем больше if (! IsPostBack) {} кажется бессмысленным ...

Первый пример:

Например, я просто гуглил проблема, как они сказали, используют это как часть решения:

if (!Page.IsPostBack)
{
   Page.LoadComplete += new EventHandler(Page_LoadComplete);
}

Что делает точно так, как закодировано, LoadComplete будет срабатывать только при первой загрузке. После нажатия кнопки или всего, что вызывает обратную передачу, событие LoadComplete остается не отсоединенным, таким образом пропуская обработчик события. Поэтому их «исправление» работает только при первой загрузке = ничего не стоит. Я быстро прокомментировал if (! Page.IsPostBack) {} , и теперь событие всегда срабатывает по желанию.

Второй пример:

Я пытаюсь привязать события к динамически создаваемой кнопке ( что, кстати, я не могу заставить работать [GRR!]). Я вижу примеры, показывающие это:

myEditToggleButton = new Button();
myEditToggleButton.ID = "editToggleButton"; 
//^GOTTA HAVE THIS FOR EVENTS TO WORK! (supposedly, I haven't seen it work...)
if (!IsPostBack)
{
   myEditToggleButton.Click += new EventHandler(myEditToggleButton_Click);
}
Controls.Add(myEditToggleButton);

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

Вопрос:

Когда следует использовать if (! IsPostBack) {} ? Я предполагаю, что это связано только с созданными наценкой элементами управления.

20
задан Community 11 July 2013 в 16:53
поделиться

1 ответ

Ваши обработчики событий должны быть подключены всякий раз, когда событие может быть запущено (независимо от статуса PostBack)

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

1
ответ дан 30 November 2019 в 00:27
поделиться
Другие вопросы по тегам:

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