【问题标题】:Variables inserted into URL not showing in address bar插入 URL 的变量未显示在地址栏中
【发布时间】:2020-03-30 15:37:27
【问题描述】:

我在按钮上使用了一种方法来重定向到不同的页面。有几个变量被插入到 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" />

【问题讨论】:

  • 在隐藏的&lt;input&gt; 字段中是否有runat="server"
  • 你也可能在第一个hidTrack.Value有错字,应该是hidYear.Value
  • @Xiaoy312 不错 :P,确实是runat="server"
  • 在代码中放置一个断点并验证所有这些变量是否确实有值。我的猜测是他们没有。
  • 尝试用标准的 asp:Button 替换 RadImageButton 看看是否可行。

标签: c# asp.net telerik


【解决方案1】:

当点击 RadImageButton2 时,页面被回发到服务器进行处理。此过程称为 ASP.NET 回发机制,IsPostback 通常用于 page_load 事件,以检测页面是否由于页面上的控件请求的回发而生成,或者是否是第一次加载页面。这对于以编程方式设置控件的值并且在回发页面时不应被覆盖的情况很重要。

看到这个sn-p:

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 = "";
    }
}  

注意,控件的实际值可以通过查看页面来源找到

这里的底线:在单击 RadImageButton2 之前查看源代码时隐藏字段应该具有值,并且 Page_Load() 不应调用任何更改这些值的代码,或者应检查 if (!IsPostBack)

附:

简单重定向不需要服务器代码,可以通过客户端脚本完成,例如:

<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;" />

【讨论】:

    【解决方案2】:

    你是说它确实有效。这意味着正在传递变量。 解决方案可能非常非常简单。

    在您单击变量之前,变量不会显示在地址栏中。尝试单击地址栏中的 URL,它将选择 URL 并显示变量。如果没有,那么它必须对代码做一些事情。

    【讨论】:

      【解决方案3】:

      啊,兄弟,搞错了。这些隐藏控件没有任何价值

      <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"/>
      

      或如用户https://stackoverflow.com/users/2316116/user2316116 所述,您可以使用

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

      值没有显示在 URL 中的原因仅仅是没有可以显示的值。

      如果您在以后的应用程序中从用户那里获取输入,请务必检查空值。 ?

      【讨论】:

        【解决方案4】:

        “beta.aspx”和“?”之间不应有“/”。尝试删除多余的斜线,看看是否能解决您的问题。

        【讨论】:

        • @MaxB 您说它工作正常,您是否确定在 Beta.aspx 中您实际上收到了这些值?在我看来,hid*.value 实际上是空的。
        • 是的,我收到了这些值,它正在导航到正确的页面。
        • 你能把页面的html贴出来吗?
        • 按钮、隐藏字段和表单标签(如果可能)。
        • 愿意分享剩下的吗?隐藏字段和表单标签?
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-06-01
        • 2016-07-28
        • 1970-01-01
        • 2015-04-23
        • 2023-03-28
        • 2016-05-13
        • 2014-04-04
        相关资源
        最近更新 更多