Ответ.Перенаправить, сохранить tabcontainer на активной вкладке

#asp.net #vb.net #viewstate #response.redirect #tabcontainer

#asp.net #vb.net #состояние просмотра #response.redirect #tabcontainer

Вопрос:

Мой VB.net tabcontainer должен оставаться на активной вкладке, когда каждая отправка проходит через response.redirect.

Как я могу этого добиться? Мне нужен этот response.redirect там, потому что он покажет, что было добавлено в основной контейнер вкладок.

 <asp:TabContainer runat="server" ActiveTabIndex="0" Height="200px" 
Width="175px" ScrollBars="Auto" EnableTheming="True" Font-
Underline="False" ID="TabContainer2" EnableViewState="False" 
Style="float:right; padding-left: 110px; margin-bottom: 340px;" 
OnActiveTabChanged="TabContainer1_ActiveTabChanged">


Protected Sub TabContainer1_ActiveTabChanged(ByVal sender As Object, 
ByVal e As EventArgs)
    ViewState("ActiveTabIdx") = TabContainer1.ActiveTabIndex
End Sub


Protected Sub SubmitCompanies_Click(ByVal sender As Object, ByVal e 
As System.EventArgs) Handles SubmitCompanies.Click
*****there is more code here but for this question, it's not necessary so it has been 
omitted*****
    Response.Redirect(Request.RawUrl)
    ViewState("ActiveTabIdx") = TabContainer1.ActiveTabIndex


Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) 
Handles Me.Load
ProductID.Value = Request.QueryString("id")
Page.Response.Cache.SetCacheability(HttpCacheability.NoCache)
If Not ViewState("ActiveTabIdx") Is Nothing Then
    TabContainer1.ActiveTabIndex = Convert.ToInt32(Session("ActiveTabIdx"))
End If
End Sub
  

Ответ №1:

ViewState не будет работать Response.Redirect . В вашей текущей реализации я бы использовал QueryString или Session для хранения ссылки на активную вкладку.

 Response.Redirect(String.Format("{0}?tab={1}", Request.RawUrl, TabContainer1.ActiveTabIndex)) 
  

Комментарии:

1. Я попробовал это и получил сообщение об ошибке, в котором говорилось, что входная строка не в правильном формате.

2. Хм … попробуйте еще раз. Я использовал неправильный идентификатор для контейнера вкладок.

3. О, Visual Studio уловила это, и я изменил его на TabContainer1, извините, я забыл упомянуть об этом. К сожалению, по-прежнему отображается то же сообщение об ошибке.

4. Я не думаю, что с этим кодом есть какие-либо проблемы… Что это за результат RawUrl ? Это не должно иметь значения, но попробуйте изменить второй аргумент на: TabContainer1.ActiveTabIndex.ToString() . Кроме того, вы знаете, что вам нужно будет добавить некоторую логику для выбора вкладки при правильной загрузке страницы?

5. Я отредактировал исходное сообщение, чтобы показать, что у меня есть при загрузке страницы. Я не слишком уверен в tabcontainer, я просто следовал руководству, которое я нашел, и надеялся, что оно работает правильно. Но он не показал мне, как сохранять вкладки активными при обновлении.

Ответ №2:

Я думаю, что вашим решением будет использовать jquery для сохранения выбранной вкладки в файле cookie или в любом другом месте, когда пользователь нажимает на вкладку, а также использовать jquery для получения старой выбранной вкладки из файла cookie и установки выбранной вкладки с помощью jquery

Комментарии:

1. Я бы действительно предпочел сделать это в ASP.net поскольку я не очень разбираюсь в jquery и нахожу его довольно сложным.

2. Если есть учебное пособие по jquery, которое похоже на мою ситуацию, я был бы рад прочитать его. Я просто ненавижу javascript. Я этого не понимаю, и это выглядит так грязно

Ответ №3:

Как я вижу, вы присваиваете значение viewstate

 ViewState("ActiveTabIdx") = TabContainer1.ActiveTabIndex
  

после

 Response.Redirect(Request.RawUrl)
  

Этот код доступен для использования.

Первое замечание заключается в том, что ViewState не переносится с новым запросом (вызывая метод перенаправления, вы запускаете новый запрос). Решение заключается в использовании строки запроса. Добавьте active tab в качестве параметра в конце вашего RawUrl, а затем прочитайте его при загрузке страницы.

Надеюсь, это поможет,

Крис

Комментарии:

1. Я попробовал Response.Redirect(Request.RawUrl(ViewState("ActiveTabIdx") = TabContainer1.ActiveTabIndex)) , и моя страница переходит на совершенно другую страницу сайта.

2. Вам нужно добавить новый параметр строки запроса к вашему ответу RawUrl. Перенаправление (запрос. RawUrl «?activeTab=» TabContainer1 . ActiveTabIndex), а затем выберите это значение с помощью запроса. Строка запроса («activeTab»)

3. В коде запроса появляется ошибка, в которой говорится Property access must assign to the property or use its value. , что я пытался использовать это перед ответом. Перенаправить и после него, и он говорит то же самое.

Ответ №4:

Сохраните индекс активной вкладки, скажем, в переменной сеанса, и в вашем Page_Load событии проверьте, Session("ActiveTabIdx") не Nothing является ли оно пустым или пустым, затем установите TabContainer1.ActiveTabIndex значение Session("ActiveTabIdx") . Что-то вроде этого:

     Protected Sub SubmitCompanies_Click(ByVal sender As Object, ByVal e 
As System.EventArgs) Handles SubmitCompanies.Click
       'Rest of code
        Session("ActiveTabIdx") = TabContainer1.ActiveTabIndex
        Response.Redirect(Request.RawUrl)
    End Sub

    Protected Sub Page_Load(ByVal Sender As Object, ByVal e as System.EventArgs) Handles Page.Load
         If not ViewState("ActiveTabIdx") is Nothing Then
                TabContainer1.ActiveTabIndex = Convert.ToInt32(Session("ActiveTabIdx"))
         End If
    End Sub
  

Между вами SubmitCompanies_Click вы перенаправляете пользователя перед установкой значения ViewStat переменной!

Комментарии:

1. Где бы я увидел ActiveTabIndex? В коде? Visual Studio не распознает getIndexofActiveTab на моей странице vb.

2. в вашем событии SubmitCompanies_Click перед вызовом перенаправления добавьте этот фрагмент кода Session(«ActiveTabIdx») = TabContainer1 . ActiveTabIndex

3. Кажется, что это сработает, но когда я отправляю новую компанию, она все равно обновляется, и вкладка возвращается к самой первой.