根据查询字符串显示完全不同的输出

时间:2009-08-14 20:57:33

标签: asp.net query-string

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

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

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

-entire page-

<% Else   %> 

-different page-

<% End If %>      

我能进入的最接近的网络是

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  

这对小事来说似乎只是好事。更改整个页面的最佳方法是什么?

6 个答案:

答案 0 :(得分:6)

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

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

答案 1 :(得分:4)

我建议使用MultiView control

简而言之,您将创建两个多视图“视图”,每个视图都带有您想要显示的html。然后你可以查看querystring参数并相应地切换多视图的活动视图。

与其他人建议的一样,这对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

答案 2 :(得分:1)

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

  • 根据输入将Response.Redirect(url)转移到其他页面。

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

答案 3 :(得分:1)

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

将您的数据放在面板中,只隐藏一个或另一个panel1.visible =(true / false)。如果你必须在同一个aspx页面中拥有它,这是最好的事情。

答案 4 :(得分:0)

为了将来参考,您仍然可以使用传统的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的多视图建议或页面重定向。

答案 5 :(得分:0)

我更喜欢使用DataBinding在ASPX页面上执行此操作:

<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