#asp.net #query-string #navigateurl
#asp.net #запрос-строка #navigateurl
Вопрос:
У меня есть панель с некоторыми элементами в ней. Когда я щелкаю правой кнопкой мыши по элементам и выбираю «открыть на новой вкладке», мне нужно открыть ссылку на новой вкладке. Например. если моя страница «http:localhost/MyPage «Моя сетка:
Имя
- abc
- bcd
- cde
Когда я нажимаю на второй элемент, NavigateUrl будет «http:localhost/MyPage/?Name=bcd«
Это работает нормально. Но я хочу скрыть имя в URL. Есть ли какой-либо другой способ, я могу передать имя на следующую страницу, не отображая его в URL. Я мог бы использовать сеансы, но, к сожалению, я не могу написать это как код для контекстного меню по умолчанию.
Комментарии:
1. Почему вы хотите это скрыть? Для опытного пользователя было бы предпочтительнее изменить URL напрямую, чтобы получить желаемый эффект. Например.
http://www.google.com/search?q=this will work great
.
Ответ №1:
Вы можете использовать LinkButton
объекты. Они выполнят обратную отправку, а затем вы сможете перенаправлять запросы на нужные страницы.
ASPX:
<asp:linkbutton id="lnkabcd" runat="server" text="abcd" onclick="lnkabcd_clicked"/>
C#:
public void linkabcd_clicked(object sender, EventArgs e)
{
Response.Redirect("URL OF TARGET PAGE");
}
Конечно, это будет очень громоздко, если у вас много ссылок. Вы можете использовать grid (надеюсь, вы используете его, как вы пишете в своем вопросе) и перехватывать событие строки со свойствами имени команды и аргумента команды.
Чтобы скрыть URL в адресной строке браузера, вам нужно выполнить перезапись URL. Для получения дополнительной информации о перезаписи URL, пожалуйста, посетите эти страницы в codeproject и msdn.
Ответ №2:
Вы могли бы установить cookie-файл — таким образом, при следующем возврате пользователя вы могли бы даже вернуть их на ту же страницу (если бы захотели).
Вы можете найти эту статью полезной при принятии решения, подходит ли вам этот вариант.
Если вам нужно установить cookie на стороне клиента, то эта статья должна вам помочь.
Комментарии:
1. Спасибо за быстрый ответ. Но как я могу установить cookie в коде. Могу ли я каким-либо образом добавить некоторый код для события щелчка «Открыть на новой вкладке»
2. Просто добавил ссылку, чтобы помочь вам 🙂
3. Еще раз спасибо, Натан, но где именно я могу добавить данные о файлах cookie. Это контекстное меню браузера по умолчанию, и когда я нажимаю «Открыть ссылку на новой вкладке», я не знаю, как добавить свой код.
Ответ №3:
Как сказал @TheVillageIdiot, переписывание URL-адреса — лучший подход. Но вы также можете использовать возможность межстраничной публикации. Проверьте это:
Разметка
<asp:HiddenField ID="HiddenField1" runat="server" ClientIDMode="Static" />
<asp:Repeater ID="Repeater1" runat="server">
<ItemTemplate>
<asp:LinkButton ID="LinkButton1" runat="server" PostBackUrl="~/Second.aspx" Text='<%# Bind("Text") %>' OnClientClick='<%# "LinkButton1_Click("" Eval("Value") "")" %>' />
</ItemTemplate>
</asp:Repeater>
<script type="text/javascript">
function LinkButton1_Click(v) {
document.getElementById('HiddenField1').value = v;
}
</script>
Как вы можете видеть в предыдущем фрагменте кода, вам нужно добавить скрытое поле для хранения выбранного элемента с помощью простого javascript. Также я определил свойство, вызываемое SelectedValue
для получения значения скрытого поля на другой стороне.
Код, лежащий в основе
protected void Page_Load(object sender, EventArgs e)
{
Repeater1.DataSource = new[] {
new { Text = "Item 1", Value = "Item 1" },
new { Text = "Item 2", Value = "Item 2" },
new { Text = "Item 3", Value = "Item 3" }
};
Repeater1.DataBind();
}
public string SelectedValue
{
get { return HiddenField1.Value; }
}
Вторая страница
Добавьте следующую директиву на страницу назначения.
<%@ PreviousPageType VirtualPath="~/Default.aspx" %>
Наконец, у вас есть доступ к предыдущей странице через PreviousPage
свойство Page
класса.
string value = ((_Default)this.PreviousPage).SelectedValue;
Комментарии:
1. Я попробовал это. Но есть одна проблема, предыдущая страница такая же, как и первая страница. Итак, это выдало мне «ошибку циклической ссылки». Мой сценарий следующий. У меня есть сетка с несколькими строками. Если я нажму на него, должен загрузиться какой-нибудь виджет, который покажет подробную информацию о выбранной строке / выбранном элементе панели (в зависимости от того). Теперь, если я хочу, чтобы эта функция отображалась в новом окне, что мне следует сделать, чтобы новая страница знала, что я уже выбрал строку, и конкретный виджет также должен быть загружен
2. Простите меня, @Noel, я не уделил достаточного внимания вашему вопросу.