Переменные, вставленные в URL, не отображаются в адресной строке - PullRequest
1 голос
/ 30 марта 2020

У меня есть метод, который используется на кнопке для перенаправления на другую страницу. Есть несколько переменных, которые вставляются в URL, чтобы помочь перейти к тому, что пользователь хочет видеть. Это работает хорошо, за исключением того факта, что переменные не отображаются в адресной строке.

После нажатия кнопки и перенаправления на следующую страницу URL выглядит следующим образом: /Beta.aspx/?year=&track=&event=&car=27&session

Как мне сделать так, чтобы мои переменные отображались в адресной строке? Ниже приведен код, используемый для нажатия кнопки.

protected void btnConfirm_Click(object sender, EventArgs e)
{

    string url = string.Format("Beta.aspx/?year={0}&track={1}&event={2}&car=27&session{3}",hidYear.Value, hidTrack.Value, hidEvent.Value, hidSession.Value);
    Response.Redirect(url);
}

Настройка кнопки

<telerik:RadImageButton ID="RadImageButton2" runat="server" Skin="Material" Text="27" OnClick="btnConfirm_Click">
</telerik:RadImageButton>

Метка формы

<form id="form1" runat="server" class="SmallFont">

Скрытые поля

<asp:HiddenField runat="server" ID="hidYear" />
<asp:HiddenField runat="server" ID="hidTrack" />
<asp:HiddenField runat="server" ID="hidEvent" />
<asp:HiddenField runat="server" ID="hidSession" />

Ответы [ 4 ]

4 голосов
/ 03 апреля 2020

При щелчке RadImageButton2 страница отправляется обратно на сервер для обработки. Этот процесс называется ASP. NET механизмом обратной передачи, и IsPostback обычно используется в событии page_load для определения, генерируется ли страница из-за обратной передачи, запрошенной элементом управления на странице, или загружается страница для первого время. Это важно для случая, когда значения элементов управления устанавливаются программно и не должны перезаписываться при отправке страницы назад.

См. Этот фрагмент:

protected void Page_Load(object sender, EventArgs e)
{
    hidYear.Value = "";
    hidTrack.Value = "";
    hidEvent.Value = "";
    hidSession.Value = ""; 
}

protected void Init_Click(object sender, EventArgs e)
{
    hidYear.Value = "2020";
    hidTrack.Value = "1";
    hidEvent.Value = "2";
    hidSession.Value = "0123456789";
}

protected void btnConfirm_Click(object sender, EventArgs e)
{
    string url = string.Format("Beta.aspx/?year={0}&track={1}&event={2}&car=27&session{3}", 
       hidYear.Value, hidTrack.Value, hidEvent.Value, hidSession.Value);
    Response.Redirect(url);
}

Все будет работать хорошо, но значения в редиректе всегда будут "", потому что Page_Load () вызывается при каждой обратной передаче. Однако со следующим небольшим изменением значения перенаправления не будут изменены и заполнены до состояния перед отправкой формы:

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack) { 
       hidYear.Value = "";
       hidTrack.Value = "";
       hidEvent.Value = "";
       hidSession.Value = "";
    }
}  

Обратите внимание, что фактические значения элементов управления можно найти, посмотрев на источник страницы

enter image description here

Итог здесь: скрытые поля должны иметь значения при взгляде на источник перед нажатием на RadImageButton2, и Page_Load () не должен вызывать любой код, который изменяется эти значения, или должны проверить для if (!IsPostBack).

PS

Простое перенаправление не требует кода сервера и может быть выполнено с помощью клиентского скрипта, например:

<script type="text/javascript">
   function PageRedirect() {
       window.location.href = "Beta.aspx/?year="
           + document.getElementById('<%=hidYear.ClientID%>').value
           + "&track=" + document.getElementById('<%=hidTrack.ClientID%>').value
           + "&event=" + document.getElementById('<%=hidEvent.ClientID%>').value
           + "&car=27&session" + document.getElementById('<%=hidSession.ClientID%>').value;
   }
 </script>

<asp:Button ID="Button1" runat="server" Text="Client Redirect" 
     OnClientClick="PageRedirect();return false;" />
0 голосов
/ 08 апреля 2020

Ааа, есть ошибка, Бро. для этих скрытых элементов управления нет никакого значения

<asp:HiddenField runat="server" ID="hidYear" />
<asp:HiddenField runat="server" ID="hidTrack" />
<asp:HiddenField runat="server" ID="hidEvent" />
<asp:HiddenField runat="server" ID="hidSession" />

, либо вы можете добавить значение на странице ASPX как

<asp:HiddenField runat="server" ID="hidYear" Value="1234"/>
<asp:HiddenField runat="server" ID="hidTrack" Value="4321" />
<asp:HiddenField runat="server" ID="hidEvent" Value="1234" />
<asp:HiddenField runat="server" ID="hidSession" Value="2405"/>

или как указано пользователем { ссылка } вы можете использовать

hidYear.Value = "2020";
hidTrack.Value = "1";
hidEvent.Value = "2";
hidSession.Value = "0123456789";

причина, по которой значение не отображается в URL, состоит просто в том, что нет значения, которое может быть отображено.

убедитесь, что пустые значения, если вы принимаете входные данные от пользователя в будущих приложениях. ?

0 голосов
/ 07 апреля 2020

Вы говорите, что это работает. Это означает, что переменные передаются. Существует вероятность, что решение действительно очень простое.

Переменные не отображаются в адресной строке, пока вы не нажмете на нее. Попробуйте нажать на URL-адрес в адресной строке, он выберет URL-адрес и отобразит переменные. Если нет, то только тогда он должен что-то делать с кодом.

0 голосов
/ 30 марта 2020

Вы не должны иметь «/» между «beta.aspx» и «?». Попробуйте удалить лишнюю строку sh и посмотрите, решит ли это вашу проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...