2011-09-09 8 views
11

Questa è probabilmente una risposta molto semplice, ma sono nuovo di RavenDb, quindi ovviamente mi manca qualcosa.RavenDb con ASP.NET MVC 3 - Come generare un URL con ID?

Ho un oggetto di base con la convenzione di default per ID:

public string Id { get; set; } 

quando salvo al negozio del documento, lo vedo ottiene un valore di tipo:

messaggi/123

che va bene, ma ... come faccio a generare un URL simile a questo:

www.mysite.com/edit/123

se faccio questo:

@Html.ActionLink("Edit", "Posts", new { id = @Model.Id }) 

Esso genera l'URL followiung:

www.mysite.com/edit/messaggi/123

Quale non è quello che voglio.

Sicuramente non è necessario manipolare le stringhe? Come le persone si avvicinano a questo?

risposta

16

RPM1984, Ci sono diversi modi per affrontarlo.

1) È possibile modificare il percorso per gestire questa situazione:

routes.MapRoute(
    "Default",            // Route name 
    "{controller}/{action}/{*id}",       // URL with parameters 
    new { controller = "Home", action = "Index", id = "" }); // Parameter defaults 

Questo permetterà MVC per accettare parametri con barre in loro

2) È possibile modificare la strategia di generazione ID predefinito:

documentStore.Conventions.IdentityPartsSeparator = "-"; 

Questo genererà iD con:

messaggi-1 messaggi-2 ecc

vedi anche qui:

http://weblogs.asp.net/shijuvarghese/archive/2010/06/04/how-to-work-ravendb-id-with-asp-net-mvc-routes.aspx

+0

Grazie Ayende - Vengo con l'opzione 2. A proposito, ho perso il tuo webinar Raven scorsa notte perché continuava a dire "ID non valido, riprova". :(Eventuali piani di inviare l'audio/video per il webinar da qualche parte? – RPM1984

+0

Grazie per la risposta. –

1

In realtà è necessario estrarre il valore intero dall'ID basato su stringhe di documenti. Questo perché il corvo può effettivamente gestire qualsiasi tipo di Id, non necessariamente un intero generato da HILO (questo è l'impostazione predefinita se non si specifica un proprio ID).

Dai un'occhiata all'esempio di RaccoonBlog. Esiste una classe di supporto "RavenIdResolver" all'interno della quale è molto semplice ottenere l'id numerico dall'identificativo dei documenti.

3

Si può semplicemente utilizzare ...

int Id; 

..instead di ...

string Id; 

nelle vostre classi di entità :)

+0

No non puoi. Non senza modificare le impostazioni Hilo. – RPM1984

+0

Davvero? Fammi doppio controllo – Korayem

+0

HYG http://stackoverflow.com/ a/9178299/80434 – Korayem

Problemi correlati