Hej Jag tror du har hittat en bugg ;) Samma fel tyvärr...Sökfält i en mastepage funkar inte från sidan med sökresultat.
Är ganska ny på ASP.NET och har stött på patrull med ett simpelt sökfält på en masterpage.
Har en masterpage som innehåller som innehåller en textbox och en knapp för att göra sökningar mot
min databas. Här är delar av koden för min masterpage.
<form id="form1" runat="server">
...
<table cellpadding="2" cellspacing="0" class="cards">
<tr>
<td class="cards_header" colspan="2">
Sök...</td>
</tr>
<tr>
<td style="width: 100px">
<asp:TextBox ID="search" runat="server" Width="100px"></asp:TextBox></td>
<td style="width: 100px">
<asp:Button ID="Button2" runat="server" Text="Sök" OnClick="Button2_Click" /></td>
</tr>
</table>
...
<div align="center">
<asp:contentplaceholder id="ContentPlaceHolder1" runat="server">
</asp:contentplaceholder>
</div>
</form>
Och här är koden för Button2_Click, även den placerad i masterpage.master
Protected Sub Button2_Click(ByVal sender As Object, ByVal e As EventArgs)
Response.Redirect("search.aspx?search=" + search.Text)
End Sub
Sidan search.aspx ser ut så här:
<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" CssClass="cards"
DataKeyNames="ProdId" DataSourceID="SqlDataSource1" AllowSorting="True"
OnRowDataBound="GridView1_RowDataBound" CellPadding="5" EmptyDataText="Ingen produkt hittades
som matchade din sökning">
<Columns>
<asp:TemplateField>
<ItemTemplate>
</ItemTemplate>
<ItemStyle CssClass="img_style" Width="1%" />
</asp:TemplateField>
<asp:TemplateField HeaderText="Produktnamn" SortExpression="ProdName">
<ItemTemplate>
<asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl='<%# Eval("ProdId", "~\details.aspx?ProdId={0}") %>'
Text='<%# Eval("ProdName") %>' CssClass="hyperlinks"></asp:HyperLink>
</ItemTemplate>
<ItemStyle HorizontalAlign="Left" Width="95%" />
<HeaderStyle HorizontalAlign="Left" />
</asp:TemplateField>
<asp:TemplateField HeaderText="Butikspris" SortExpression="PriceIncVAT">
<ItemTemplate>
<asp:Label ID="Label4" runat="server" Text="Label"></asp:Label>
</ItemTemplate>
<ItemStyle Width="1%" />
</asp:TemplateField>
<asp:TemplateField HeaderText="Webpris" SortExpression="InStock">
<ItemTemplate>
<asp:Label ID="Label5" runat="server" Text="Label"></asp:Label>
</ItemTemplate>
<ItemStyle Width="1%" />
</asp:TemplateField>
<asp:TemplateField HeaderText="InStock" SortExpression="InStock">
<EditItemTemplate>
<asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("InStock") %>'></asp:TextBox>
</EditItemTemplate>
<ItemStyle CssClass="stock_style" HorizontalAlign="Center" Width="1%" />
<ItemTemplate>
<asp:Image ID="Image1" runat="server" />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<ItemTemplate>
<asp:Button ID="Button1" runat="server" Text="Köp"
CommandArgument='<%# Eval("ProdId") %>' OnCommand="Button1_Click" />
</ItemTemplate>
<ItemStyle Width="1%" />
</asp:TemplateField>
</Columns>
<HeaderStyle CssClass="cards_header" />
<RowStyle CssClass="cards_body_even" />
<PagerStyle CssClass="cards_body" />
<AlternatingRowStyle CssClass="cards_body" />
<SelectedRowStyle BackColor="White" />
</asp:GridView>
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:store_shopConnectionString %>"
SelectCommand="SELECT Product.ProdName, Product.PriceIncVAT, Product.InStock, Product.ProdImage, Product.ProdId, GroupPrice.WebPrice, GroupPrice.StorePrice FROM Product INNER
JOIN GroupPrice ON Product.ProdGroup = GroupPrice.ProdGroup WHERE (Product.ProdGroup =
GroupPrice.ProdGroup) AND Product.ProdId LIKE '%' +@search+'%'">
<SelectParameters>
<asp:QueryStringParameter Name="search" QueryStringField="search" />
</SelectParameters>
</asp:SqlDataSource>
</asp:Content>
Nu till problemet, när man gör en första sökning från t.e.x default.aspx så visas search.aspx och jag får
fram mitt sökresultat, om jag nu söker på ett nytt värde från search.aspx med visas även det korrekt. Men om jag försöker göra det ytterligare en gång får jag ett "page not found" meddelande och istället
för .../search.aspx?search=bx i adressfältet syns .../search.aspx?
search=__EVENTTARGET=&__EVENTARGUMENT=&__VIEWSTATE=o%2BscHVzxrpxid2.
Vad gör jag för fel?
Har läst mig till att det tydligen är svårt att få tag i värden mellan master och content, kan det vara något sådant?
Eller är jag helt fel ute när det gäller upplägget, det måste ju vara något liknande som finns på massvis av andra asp.net sidor?
Tacksam för hjälp!
Jonas
Sv: Sökfält i en mastepage funkar inte från sidan med sökresultat.
Testa att göra följande i ditt klick event för sök-knappen:
Session("SearchText") = search.Text
Response.Redirect("seach.aspx")
Sedan i SqlDataSoruce så byt ut parametern QueryStringParemeter till SessionParameter och se om du får liknande problem.. tex skriv ut innehållet från Session("SearchText") på din Search sida.. får du samma problem så säg till.
/Fredrik Normén [ASP.Net MVP]
blog: http://fredrik.nsquared2.comSv:Sökfält i en mastepage funkar inte från sidan med sökresultat.
hittade det här idag...
www.odetocode.com/Articles/450.aspx
Hänger inte riktigt med på allt, men det känns relevant ;)
scrollar man ner en bit så hittar man rubriken "Master Page To Content Page Interaction"
kanske någon kan förklara lite närmare utifrån min situation?
Tack för hjälpen, det uppskattas!
/jonas