У меня есть сайт asp.net (C# backend), который загружает информацию из базы данных. Это позволяет пользователям сохранять информацию, нажав кнопку добавления/удаления. Эта кнопка динамически изменяется в зависимости от того, сохранил ли пользователь ее или нет. Я использую commandnames и аргументы для передачи данных. Когда кнопка нажата, она остается на одной странице и просто обновляет внешний вид (делает обратную передачу). Это нормально работает при нормальных условиях. Однако, если пользователь переходит от страницы, а затем обратно на страницу, он повторно выполняет метод OnClick для кнопки, которая была нажата.Событие ASP.NET Button срабатывает при нажатии кнопки назад
Я знаю, что он делает обратную передачу при использовании кнопки «Назад», но почему он запускает последний onclick? Это нормальное поведение? Я попытался отключить кеширование и попытался сделать страницу истечением срока, и все, но ничего не работает. Данные отображаются в ретрансляторе, а ViewState включен ... из того, что я читал, мне интересно, является ли это причиной. Однако, если ViewState отключен, то при обратной передаче результатов не будет. Если это проблема, есть ли другой способ получить данные для динамического обновления в Repeater без использования ViewState? Не уверен, что это будет какая-то помощь, но разметка кнопки, которая показывает имя команды и аргумент, приведена ниже.
<asp:Repeater ID="ItemRepeater" runat="server" EnableViewState="true">
<!--Lots of other code before pressed button-->
<asp:Button ID="additembutton" runat="server" OnClick="AddDelOnClick" Text='<%# textToDisplay((int)Eval("isSaved")) %>'
CommandName='<%# DataBinder.Eval(Container.DataItem, "isSaved").ToString().Trim() %>'
CommandArgument='<%# DataBinder.Eval(Container.DataItem, "itemnumber").ToString().Trim() + "~" +
DataBinder.Eval(Container.DataItem, "department").ToString().Trim() + "~" +
DataBinder.Eval(Container.DataItem, "itemdescription").ToString().Trim() + "~" +
DataBinder.Eval(Container.DataItem, "isSaved").ToString().Trim()%>'
CssClass='<%# cssClassToDisplay((int)Eval("isSaved")) %>' /></td></tr>
Самое смешное, что у меня есть другая страница, которая делает что-то подобное (просто обновление вместо добавления/удаления), и оно отлично работает при использовании обратно. Мне еще предстоит найти что-то другое, кроме того, как я делаю имя команды, но до сих пор мне не повезло. Этот код вы здесь делаете на главной странице или на странице с элементами управления? –
ОК, похоже, что это по-прежнему нормальное поведение, но изменение моего аргумента команды привело меня к тому, где я должен был быть, когда все изломы были разработаны. Кажется, я всегда отвечаю на свой вопрос сразу после публикации. –
спасибо за обновление – AdamRoof