【问题标题】:Showing completely different output based on the query-string根据查询字符串显示完全不同的输出
【发布时间】:2009-08-14 20:57:33
【问题描述】:

我正在尝试学习 asp.net (vb.net),但遇到了一些麻烦。我想根据查询字符串更改页面内容。

在经典的 asp 中我会这样做:

<% If request.querystring("page") = 1 THEN %>

-整个页面-

<% Else   %> 

-不同的页面-

<% End If %>      

我能在 .net 中获得的最接近的是

Sub Page_Load(ByVal Sender as Object, ByVal E as EventArgs)  
        If Request.QueryString("page") = 1 Then  
            lblMessage1.Text = "message"  
        Else  
            lblMessage1.Text = "message2"  
        End If  
End Sub  

这似乎只适用于小事。更改整个页面的最佳方法是什么?

【问题讨论】:

  • 你是什么意思改变整个页面?您的所有内容页面都可以在 Page_Load 或您从 Page_Load 中调用的其他函数中完成。如果您使用 ASP 控件,在调用 Page_Load 之后,它将触发这些控件的事件(例如 Button.Click)

标签: asp.net query-string


【解决方案1】:

您可以执行以下操作(简单重定向):

If Request.QueryString("page") = 1 Then
   Response.Redirect("MyPage1.aspx")
Else
   Response.Redirect("MyPage2.aspx")
End If

你也可以这样做(阅读更多here):

If Request.QueryString("page") = 1 Then
   Server.Transfer("MyPage1.aspx")
Else
   Server.Transfer("MyPage2.aspx")
End If

最后还有一个选项(显示/隐藏页面上的不同面板):

If Request.QueryString("page") = 1 Then
   MyPanel1.Visible = true
   MyPanel2.Visible = false
Else
   MyPanel1.Visible = false
   MyPanel2.Visible = true
End If

【讨论】:

  • @womp:我刚刚在 20 秒内被 -4 击中......你的帖子实际上不符合要求。见我的笔记。
  • 也许不是你……每个帖子都失去了投票,我注意到你丢了 6 个代表……道歉。
  • @womp: 不用担心,我讨厌这里的系统游戏...我知道人们会在 META 上退而求其次,但是当您在以下问题上失去 4 分时20秒不解释为什么,很可疑。
  • 看看哪些线程产生这种活动总是很有趣的......总是“更容易”的问题
  • 不开玩笑......我真的看到它在 jQuery 上起飞了。甚至看到一些答案#2是从#1复制粘贴(或输入相同),然后答案1在-1被否决......
【解决方案2】:

我建议使用MultiView control

简而言之,您将创建两个多视图“视图”,每个视图都包含您要显示的 html。然后您可以查看查询字符串参数并相应地切换多视图的活动视图。

像其他人建议的那样,这对 Response.Redirect() 有很多好处。首先,这总是会产生至少两个浏览器请求。此外,Response.Redirect() 会在后台引发 ThreadAborted 异常,这会使诊断应用程序的人感到困惑。

MultiView 控件示例:

ASPX:

<form id="form1" runat="server">
    <div>
    <asp:MultiView ID="MultiView1" runat="server">
        <asp:View runat="server">
        Hi, this is Page 1
        </asp:View>
        <asp:View runat="server">
        Hi, this is Page 2
        </asp:View>
    </asp:MultiView>    
    </div>
    </form>

代码:

 Protected  Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs)
            If Request.QueryString("page") = "1" Then
                MultiView1.ActiveViewIndex = 0
            Else 
                MultiView1.ActiveViewIndex = 1
            End If
 End Sub

【讨论】:

  • 当这个人询问 VB 时看起来很像 C#
  • 我花了一些时间,但我将 更改为 ,它工作得很好!非常感谢您的帮助!
【解决方案3】:

你真的有几个选择,你可以:

  • Response.Redirect(url) 根据输入跳转到不同的页面。

  • 您可以将 ASP:Panel 的“可见”属性设置为 false,并根据输入切换该值。

【讨论】:

  • 或多视图而不是面板。
【解决方案4】:

为什么不使用不同的文件呢?重定向到不同的页面。 这样可以避免到处都有 if 语句。

将您的数据放在面板中,然后隐藏一个或另一个 panel1.visible = (true/false)。如果您必须将所有内容都放在同一个 aspx 页面中,这是最好的做法。

【讨论】:

    【解决方案5】:

    我更喜欢在 ASPX 页面上使用 DataBinding:

    <asp:PlaceHolder runat="server" ID="Messages">
        <asp:Label runat="server" Visible=<%# Request.QueryString("page") = 1 %> Text="Message 1" />    
        <asp:Label runat="server" Visible=<%# Request.QueryString("page") <> 1 %> Text="Message 2"/>
    </asp:PlaceHolder>
    

    然后在服务器端:

    Protected  Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs)            
        Messages.DataBind()
    End Sub
    

    【讨论】:

      【解决方案6】:

      为了将来参考,您仍然可以使用经典的 ASP 方式来控制内容。这是我刚才写的一个 ASPX 页面:

      <%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %>
      
      <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      
      <html xmlns="http://www.w3.org/1999/xhtml">
      <head runat="server">
          <title></title>
      </head>
      <body>
          <form id="form1" runat="server">
          <div>
      <%
          if (3 == 9)
          {%>
          <span>Hello</span>
          <%
          }
          else
          {
          %> <span>What?</span > <%
          }
      
           %>   
      
          </div>
          </form>
      </body>
      </html>
      

      当页面呈现时,它会显示“什么?”在页面上。

      但是,我会说这是不好的做法和糟糕的设计!使用 womp 的多视图建议或页面重定向。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-08
        • 2011-05-08
        • 1970-01-01
        相关资源
        最近更新 更多