Avatar billede stairway_to_heaven Nybegynder
11. september 2008 - 13:45 Der er 22 kommentarer og
1 løsning

Mvc - url-routing

Jeg sidder og bakser med url routing.

1. Brugere skal kunne indtaste www.side.dk/minside
2. Brugeren kommer ind på den valgte side, hvor dataen om minside hentes fra en database

Pt. vil den have f.eks www.side.dk/Home/minside
HVordan skrottes /Home/
Avatar billede stairway_to_heaven Nybegynder
11. september 2008 - 13:47 #1
Samt kan det hele styres via en controller?
Avatar billede jokkejensen Novice
11. september 2008 - 13:51 #2
jeg bruger www.urlrewriting.net den er ret go, der benyttes regex fra web.config til at smide videre til en bestemt url med querystrege.

/JJ
Avatar billede jokkejensen Novice
11. september 2008 - 13:51 #3
3.5 har vist nok noget indbygget.
Avatar billede simsen Mester
11. september 2008 - 13:57 #4
Giver jokkejensen ret - har lige lavet min første med database - og da jeg havde fundet ideen i det - var det ganske simpelt....... Så beslutter du dig for den, så spørg ind til det, hvis du ikke kan hitte ud af det :-)
Avatar billede stairway_to_heaven Nybegynder
11. september 2008 - 14:03 #5
simsen -> Jeg må nok ærlig erkende at jeg ikke helt forstår den?! :-)
Avatar billede stairway_to_heaven Nybegynder
11. september 2008 - 14:06 #6
Jeg skal udskrive en masse navne fra en database, og de skal kunne hentes via f.eks www.side.dk/brugernavn1231

og der på siden vise noget info, der også kommer fra databasen

Måske du havde et eksempel på det?
Avatar billede simsen Mester
11. september 2008 - 14:22 #7
Du har ikke nået at læse noget som helst endnu ;-)

Du har normalt din siden sådan her - når du opbygger fra database default.aspx?id=99 (hvor 99 er det id nr. der er fra databasen).

I dine link skriver du så istedet www.ditdomæne.dk/Forside.aspx eller www.ditdomæne.dk/Produkter.aspx

I web.config skriver du så flere ting:

I <configSections>:
<section name="urlrewritingnet"
            requirePermission ="false"
            type="UrlRewritingNet.Configuration.UrlRewriteSection, UrlRewritingNet.UrlRewriter"  />

Umiddelbart efter <configSections>:
<urlrewritingnet
    rewriteOnlyVirtualUrls="true"
    contextItemsPrefix="QueryString"
    defaultPage = "default.aspx"
    defaultProvider="RegEx"
    xmlns="http://www.urlrewriting.net/schemas/config/2006/07" >
    <rewrites>
      <add name="UrlRewriting"  virtualUrl="^~/(.*).aspx"
            rewriteUrlParameter="ExcludeFromClientQueryString"
            destinationUrl="~/Default.aspx?id=$1"
            ignoreCase="true" />
    </rewrites>
  </urlrewritingnet>

I <httpModules>:
<add name="UrlRewriteModule"
          type="UrlRewritingNet.Web.UrlRewriteModule, UrlRewritingNet.UrlRewriter" />

Du skal selvfølgelig huske at tilføje UrlRewritingNet.UrlRewriter.dll som en reference.

Nu har jeg min menu som et treeview og i SelectedNodeChanged har jeg så lavet den her lille krølle (hvis der skulle være mellemrum i menu teksten):
string tekst = selectedNode.Text;
        tekst = tekst.Replace(" ", "_");
        Response.Redirect("~/" + tekst + ".aspx");

Det var vist sådan set det :-)
Avatar billede simsen Mester
11. september 2008 - 14:25 #8
Hov glemte lige - at du så i din pageload kan finde din querystring (selvom den er skjult) - ved at skrive sådan her:

string pagenum = Convert.ToString(Request.QueryString["id"]);
Avatar billede stairway_to_heaven Nybegynder
11. september 2008 - 14:38 #9
Problemet lå i at, min adobe reader ikke vil åbne dokumentationen :-)
Irriterende!
Avatar billede stairway_to_heaven Nybegynder
11. september 2008 - 14:39 #10
Det er ikke muligt at fjerne .aspx? eller?!
Avatar billede stairway_to_heaven Nybegynder
11. september 2008 - 14:42 #11
Det er sådan bare ren kosmetisk, da de vil skulle fungere som reelle links,
Avatar billede simsen Mester
11. september 2008 - 18:20 #12
Skal du ændre det, så den ikke har aspx med i enden, skal du ændre i IIS'en - og det ved jeg så ikke om du har mulighed for, når sitet skal lægges ud. Og hvordan du nøjagtig gør det, kan jeg ikke sige, da det ikke har været et issue for mig. Læs i dokumentationen - jeg kan anbefale at installere en ny opdateret reader så :-)
Avatar billede simsen Mester
12. september 2008 - 09:25 #13
Kosmetisk skriver du......

Forsøg at se det sidste jeg gør - det gør jeg i codebehind filen, så ikke noget brugeren får med - linket er f.eks. Forside eller Produkter - jeg tilføjer selv .aspx i codebehind filen:

string tekst = selectedNode.Text;
        tekst = tekst.Replace(" ", "_");
        Response.Redirect("~/" + tekst + ".aspx");
Avatar billede simsen Mester
15. september 2008 - 13:59 #14
Lukketid? :-)
Avatar billede stairway_to_heaven Nybegynder
30. september 2008 - 08:49 #15
Undskylder ventetiden, har stået med en smadret computer :(.

Men lukketid!
Avatar billede stairway_to_heaven Nybegynder
30. september 2008 - 08:50 #16
Tak for hjælpen
Avatar billede stairway_to_heaven Nybegynder
30. oktober 2008 - 11:46 #17
Ved godt den er lukket, men fik endelig tid til at kaste mig over UrlRewriting
Jeg for denne fejl:
Inputstrengen var ikke i et korrekt format.
Beskrivelse: Der opstod en undtagelse, der ikke blev behandlet, under udførelse af den aktuelle webanmodning. Se staksporingen for at få yderligere oplysninger om fejlen, og hvor den kom fra i koden.

Detaljer om undtagelse: System.FormatException: Inputstrengen var ikke i et korrekt format.

Kildefejl:

Der blev oprettet en undtagelse, der ikke blev behandlet,  under kørsel af den aktuelle webanmodning. Du kan finde oplysninger om undtagelsens oprindelse og placering ved hjælp af nedenstående staksporing af undtagelser. 

Staksporing:


[FormatException: Inputstrengen var ikke i et korrekt format.]
  System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal) +7467367
  System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info) +119
  System.String.System.IConvertible.ToInt32(IFormatProvider provider) +46
  System.Convert.ChangeType(Object value, TypeCode typeCode, IFormatProvider provider) +297
  System.Web.UI.WebControls.Parameter.GetValue(Object value, String defaultValue, TypeCode type, Boolean convertEmptyStringToNull, Boolean ignoreNullableTypeChanges) +141
  System.Web.UI.WebControls.Parameter.GetValue(Object value, Boolean ignoreNullableTypeChanges) +63
  System.Web.UI.WebControls.ParameterCollection.GetValues(HttpContext context, Control control) +301
  System.Web.UI.WebControls.SqlDataSourceView.InitializeParameters(DbCommand command, ParameterCollection parameters, IDictionary exclusionList) +264
  System.Web.UI.WebControls.SqlDataSourceView.ExecuteSelect(DataSourceSelectArguments arguments) +472
  System.Web.UI.WebControls.AccessDataSourceView.ExecuteSelect(DataSourceSelectArguments arguments) +58
  System.Web.UI.DataSourceView.Select(DataSourceSelectArguments arguments, DataSourceViewSelectCallback callback) +19
  System.Web.UI.WebControls.DataBoundControl.PerformSelect() +142
  System.Web.UI.WebControls.BaseDataBoundControl.DataBind() +73
  System.Web.UI.WebControls.DetailsView.DataBind() +4
  System.Web.UI.WebControls.BaseDataBoundControl.EnsureDataBound() +82
  System.Web.UI.WebControls.DetailsView.EnsureDataBound() +184
  System.Web.UI.WebControls.CompositeDataBoundControl.CreateChildControls() +72
  System.Web.UI.Control.EnsureChildControls() +87
  System.Web.UI.Control.PreRenderRecursiveInternal() +44
  System.Web.UI.Control.PreRenderRecursiveInternal() +171
  System.Web.UI.Control.PreRenderRecursiveInternal() +171
  System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +842
Avatar billede stairway_to_heaven Nybegynder
30. oktober 2008 - 11:46 #18
Har denne streng
        <add name="test" virtualUrl="^~/(.*).aspx" rewriteUrlParameter="ExcludeFromClientQueryString" destinationUrl="~/Default.aspx?id=$5" ignoreCase="true"/>
Avatar billede stairway_to_heaven Nybegynder
30. oktober 2008 - 11:47 #19
Blah!, det  $5 skulle have det lille start tegn væk :) ups!
Avatar billede stairway_to_heaven Nybegynder
30. oktober 2008 - 12:03 #20
Hvorfor er det at jeg ikke kan skrive flg:
<add name="port" virtualUrl="^~/(.*)" rewriteUrlParameter="ExcludeFromClientQueryString" destinationUrl="~/Default.aspx?id=6" ignoreCase="true"/>
      <add name="fort" virtualUrl="^~/(.*)" rewriteUrlParameter="ExcludeFromClientQueryString" destinationUrl="~/Default.aspx?id=3" ignoreCase="true"/>

Men skal tilføje en mappe:
<add name="port" virtualUrl="^~/Portefølje/(.*)" rewriteUrlParameter="ExcludeFromClientQueryString" destinationUrl="~/Default.aspx?id=6" ignoreCase="true"/>
      <add name="fort" virtualUrl="^~/(.*)" rewriteUrlParameter="ExcludeFromClientQueryString" destinationUrl="~/Default.aspx?id=3" ignoreCase="true"/>
Avatar billede stairway_to_heaven Nybegynder
30. oktober 2008 - 12:30 #21
En andet problem er hvordan læser den ra en database?
Avatar billede stairway_to_heaven Nybegynder
15. november 2008 - 13:04 #22
Jeg kan ikke helt få flere regler til at fungere så går den bare tilbage til den første eksempel:
  <add name="Rule1" virtualUrl="^~/(.*).aspx" rewriteUrlParameter="ExcludeFromClientQueryString" destinationUrl="~/Default.aspx?id=$1" ignoreCase="true"/>
      <add name="Rule2" virtualUrl="^~/Comments/(.*).aspx" rewriteUrlParameter="ExcludeFromClientQueryString" destinationUrl="~/Details.aspx?id=$2" ignoreCase="true"/>
Avatar billede stairway_to_heaven Nybegynder
15. november 2008 - 13:05 #23
Åbner en ny post
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