#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. Кажется, что это сработает, но когда я отправляю новую компанию, она все равно обновляется, и вкладка возвращается к самой первой.