Avatar billede kongen72 Nybegynder
06. januar 2010 - 03:48 Der er 13 kommentarer og
1 løsning

søgeformular

Hej,

Kan i hjælpe mig med en god og solid søgeformular i asp.net / c#, som skal søge alt indhold på hele websitet. Har kigget rundt omkring, men det har bare gjort mig mere forvirret!

Hvis i kender til nogle gode og simple links, så er ville det være super!
Avatar billede keysersoze Guru
06. januar 2010 - 07:09 #1
hvad skal du søge i? database eller?
Avatar billede kongen72 Nybegynder
06. januar 2010 - 16:15 #2
ja, alt mit indhold ligger i database! Noget du kan hjælpe mig med?
Avatar billede jimmydk Nybegynder
06. januar 2010 - 16:38 #3
"Select * from Tabel where (Kolonne like'%" + Soegefelt.Text + "%')"
Avatar billede kongen72 Nybegynder
06. januar 2010 - 17:07 #4
hej jimmydk!

tak for dit svar! ;-)
hvor skal denne kode placeres? masterpage eller hvordan?
-og kunne jeg få lidt mere sammenhængende kode, eller er det alt hvad der skal bruges for at lave en søgeformular?
Avatar billede jimmydk Nybegynder
06. januar 2010 - 17:43 #5
Det afhænger lidt af om det skal være et søgefelt, der skal ligge på alle sider(masterpage9 eller kun på en side.

Men hvis den skal ligge på masterpage, skal du gøre som følgende.
Opret en ny side/fil som du kalder Soeg.ascx

På design delen
ligger du følgende kode.

<asp:TextBox ID="SoegT" runat="server" Font-Size="Smaller" AutoCompleteType="Search">Skriv søgeord her</asp:TextBox><asp:Button
    ID="SoegK" runat="server" Font-Size="Smaller" OnClick="SoegK_Click" Text="Søg" />


i Codebehind siden ligger du denne

    protected void SoegK_Click(object sender, EventArgs e)
    {
        Session["Soeg"] = SoegT.Text;
        Response.Redirect("Soeg.aspx");
    }


Så laver du en alm. aspx side som du kalder Soeg.aspx

På design delen ligger du det her.
    <br />
    <h2>Indhold</h2>
    <asp:Label ID="LinkL" runat="server"></asp:Label>


I codebehinden filen ligger du (Page_Load)
if (Convert.ToString(Session["Soeg"]) == "" || Convert.ToString(Session["Soeg"]) == "Skriv søgeord her")
        {
            LinkL.Text = "Der skal være indtastet søgeord før der kan søges";
        }
        else
        {

            LinkL.Text = "";

            OleDbConnection MyConnection = new OleDbConnection();
            //Her sættes hvor databasen er
            MyConnection.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|CMSdatabasen.mdb";
           
            //string strSQL = ("Select * from Tabel where (Kolonne like'%" + Convert.ToString(Session["Soeg"]) + "%')");
string strSQL = ("Select * from TBSider where (Indhold like'%" + Convert.ToString(Session["Soeg"]).ToLower().Replace("æ", "æ").Replace("ø", "å").Replace("å", "å") + "%')");

            OleDbCommand objCommand = new OleDbCommand(strSQL, MyConnection);
            OleDbDataReader objDataReader = null;

            try
            {
                //Åbner forbindelsen
                MyConnection.Open();
                //Vores reader
                objDataReader = objCommand.ExecuteReader();
                //Mens vores datareader køre
                while (objDataReader.Read() == true)
                {
                    string Indholdet = Convert.ToString(objDataReader["Indhold"]);
                   
                    //Her kommer vi dataen fra databasen ind i tekstfelt,label eller andet
                    LinkL.Text += "<ul><li><a href='" + "Default.aspx?SID=" + Convert.ToString(objDataReader["Side"]) + "'>" + Convert.ToString(objDataReader["Side"]) + "</a>" + "<br/>" + "Denne side indeholde de/det ord der er søgt på" + "</li></ul>";
                }
                //Lukker reader
                MyConnection.Close();
                objDataReader.Close();
                if(LinkL.Text == "")
                {
                    LinkL.Text = "Der blev desværre ikke fundet noget som passede overens med det indtastet ";
                }


            }
            //Fanger fejl
            catch (Exception exept)
            {
                //Udskriver fejlen
                Response.Write(exept);
            }
            //Lukker forbindelsen til databasen igen
           
            Session["Soeg"] = "";
        }


I toppen af din masterpage ligger du det her.
<%@ Register Src="UserControls/Soeg.ascx" TagName="Soeg" TagPrefix="uc4" %>

Og der hvor du vil have dit søgefelt ligger du det her...
[/i]<uc4:Soeg ID="Soeg" runat="server"  />[i/]

Om det er den pæneste måde at gøre det ved jeg ikke men det virker. ;)
Avatar billede jimmydk Nybegynder
06. januar 2010 - 19:51 #6
Hmm kan se der gik ged i sql strengen

string strSQL = ("Select * from TBSider where (Indhold like'%" + Convert.ToString(Session["Soeg"]).ToLower().Replace("æ", "& # 230;").Replace("ø", "& # 248;").Replace("å", "& # 229;") + "%')");

Du skal fjerne mellemrummet mellem &, # og 2 tallet
Avatar billede kongen72 Nybegynder
06. januar 2010 - 20:19 #7
Hej jimmydk,

rigtig mange gange tak, det er præcis hvad jeg er på udkig efter. :-) Har dog lidt problemer med at få det til at spille optimalt.

Hvordan ser din UserControl ud?

uden userControlen så får jeg denne eller disse fejl i label LinkL:

System.Data.OleDb.OleDbException: Der opstod en eller flere fejl ved en OLE DB-handling på flere trin. Kontroller alle OLE DB-statusværdier. Handlingen blev ikke udført. ved System.Data.OleDb.OleDbServicesWrapper.GetDataSource(OleDbConnectionString constr, DataSourceWrapper& datasrcWrapper) ved System.Data.OleDb.OleDbConnectionInternal..ctor(OleDbConnectionString constr, OleDbConnection connection) ved System.Data.OleDb.OleDbConnectionFactory.CreateConnection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningObject) ved System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(DbConnection owningConnection, DbConnectionPoolGroup poolGroup) ved System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection) ved System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory) ved System.Data.OleDb.OleDbConnection.Open() ved Soeg.Page_Load(Object sender, EventArgs e) i c:\Users\Lars\Documents\Visual Studio 2008\WebSites\HSJ\Soeg.aspx.cs:linje 34

Linje 34 er: MyConnection.Open();
Avatar billede jimmydk Nybegynder
06. januar 2010 - 20:34 #8
Har du denne i toppen af din side(Soeg.aspx.cs).?

using System.Data.OleDb;
Avatar billede kongen72 Nybegynder
06. januar 2010 - 20:36 #9
ja
Avatar billede kongen72 Nybegynder
06. januar 2010 - 21:00 #10
hvordan har du opbygget userControllen?
Avatar billede jimmydk Nybegynder
07. januar 2010 - 08:27 #11
Hmm Jeg smider en en virkende udgave op på min hjemmeside senere i dag, så kan du hente den. ;o)
Avatar billede kongen72 Nybegynder
07. januar 2010 - 16:24 #12
oki, mange tak! :-) Hvor og hvordan kan jeg finde den?
Avatar billede jimmydk Nybegynder
07. januar 2010 - 18:27 #13
Avatar billede kongen72 Nybegynder
07. januar 2010 - 18:31 #14
tak ;-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester