Hvis du vil undgå at benytte en querystring - og undgå at skifte mellem forms - kunne du komme relativt let omkring det ved at oprette 2 contentplaceholders på din master.
Den ene kunne du så lægge din søgeresultatsliste i - og den anden kunne du lade være en art maincontentplaceholder.
Du vil på den måde have både dit søgefelt, og den resultatliste på masteren direkte.
Alle almindelige sider kunne så angive en header i resultatlisten (eller bare overskrive den uden at lægge noget i den), og på din søgeside kunne du så undlade at overskrive resultatlisten.
Teknisk set behøver du overhovedet ikke at have en søgeformular - da søgefunktionaliteten ligger i masteren.
På den måde vil du kunne vise søgeresultater på alle de sider du vil, og du kan ved på masteren at styre visibility på dine placeholders - styre hvad der skal vises.
Et skelet kunne være sådan her:
// din master
<%@ Master Language="C#" AutoEventWireup="true" CodeFile="WikiMaster.master.cs" Inherits="WikiMaster" %>
<!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>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<table border="0" cellpadding="0" cellspacing="0" style="width: 100%; height: 100%">
<tr>
<td colspan="2" style="height: 200px">
</td>
</tr>
<tr>
<td style="width: 200px">
<asp:TextBox ID="txtSearchText" runat="server"></asp:TextBox>
<asp:Button ID="BtnSearch" runat="server" Text="Button" OnClick="BtnSearch_Click" /></td>
<td>
<asp:contentplaceholder id="PhSearchResults" runat="server">
<asp:GridView ID="GridView1" runat="server">
</asp:GridView>
</asp:contentplaceholder>
<asp:contentplaceholder id="PhContent" runat="server">
</asp:contentplaceholder>
</td>
</tr>
</table>
</div>
</form>
</body>
</html>
Søgefelt, og knap til eksekvering af søgningen.
// koden
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
public partial class WikiMaster : System.Web.UI.MasterPage
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void BtnSearch_Click(object sender, EventArgs e)
{
this.PhContent.Visible = false;
this.PhSearchResults.Visible = true;
string[] searchResult = { txtSearchText.Text };
GrdSearchResults.DataSource = searchResult;
GrdSearchResults.DataBind();
}
}
Det eneste der sker - er at knaptrykket samles op - en søgning eksekveres, og visibility på placeholders styres.
Dine almindelige sider kunne så se sådan her ud:
<%@ Page Language="C#" MasterPageFile="~/WikiMaster.master" AutoEventWireup="true" CodeFile="SomePage.aspx.cs" Inherits="Default2" Title="Untitled Page" %>
<asp:Content ID="Content2" ContentPlaceHolderID="PhContent" Runat="Server">
En eller anden side<br />
<asp:Button ID="Button1" runat="server" Text="Button" />
</asp:Content>
Bemærk at placeholderen der holder resultatlisten ikke overskrives-
Og... du kan så undvære en søgeform - hvis der ikke skal være noget i den.
Du kan jo lige prøve det af ... Det er da en mulighed der er ret enkel at have med at gøre.
Men... Jeg ville nok selv benytte querystring - det er rart at kunne linke med et søgeord direkte (også udefra).
Mvh