Для чего используется набор TempData в asp.net MVC? [дубликат]

Очень интересный вопрос и очень похвальный репекс. Мне удалось найти решение. Вы можете заменить ваш серверный объект следующим образом:

server <- function(input, output, session) {
  alld <- reactiveValues()
  alld$ui <- list()

  # Action to add new Segment
  observeEvent(input$addSeg,{
    new_id <- length(alld$ui) + 1
    sub_name <- paste0("addSub_", new_id)

    alld$ui[[new_id]] <- list(
      actionButton(sub_name, "Add a Sub Segment")
    )

    observeEvent(input[[sub_name]], {
      new_text_id <- length(alld$ui[[new_id]]) + 1
      alld$ui[[new_id]][[new_text_id]] <- HTML(paste0("<br>addSub<br>"))
    })
  })

  output$myUI <- renderUI({alld$ui})

  output$txt <- renderText({
    capture.output(str(alld$ui))
  })
}

Давайте поговорим о вашем исходном коде. Ваш первый наблюдатель работает просто отлично. Второй, однако, вызывает нежелательное поведение. Возвращает список новых наблюдателей, по одной на каждую кнопку addSub, которая в данный момент находится в приложении. Это означает, что при первом щелчке он создает наблюдателя для addSub_1, а при втором щелчке возвращает наблюдателя для addSub_1 и addSub_2. Однако первый addSub_1 наблюдатель все еще существует. Это означает, что при нажатии addSub_1 отвечают два наблюдателя, и текст отображается дважды.

Мое решение - объединить двух ваших наблюдателей в одного. Когда вы нажимаете addSeg, кнопка создается в списке UI, и также создается наблюдатель, который ее обрабатывает. Таким образом, нет дубликатов, и приложение работает, как и ожидалось.

7
задан Community 23 May 2017 в 12:19
поделиться

1 ответ

TempData используется для обмена данными между действиями контроллера. Если Ваш контроллер делает RedirectToAction, и для целевого действия нужны данные (возможно, конкретный образцовый экземпляр) для реакции, можно хранить эти данные в TempData. Используя TempData подобно хранению его на сессии, но только для одного распространения в прямом и обратном направлениях. Вы используете TempData, когда необходимо передать данные другому действию контроллера, а не представлению для рендеринга.

17
ответ дан 6 December 2019 в 11:53
поделиться
Другие вопросы по тегам:

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