2011-09-09 3 views
11

Это, вероятно, очень простой ответ, но я новичок в RavenDb, поэтому я, очевидно, что-то пропустил.RavenDb с ASP.NET MVC 3 - Как сгенерировать URL с идентификатором?

У меня есть базовый объект с конвенцией по умолчанию для ID:

public string Id { get; set; } 

Когда я сохранить его в хранилище документов, я вижу, он получает значение как:

сообщений/123

Что хорошо, но ... как я генерировать URL, как это:

www.mysite.com/edit/123

Если я это сделать:

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

Он будет генерировать followiung URL:

www.mysite.com/edit/постов/123

Это не то, что я хочу.

Неужели мне не нужно выполнять манипуляции с строкой? Как люди подходят к этому?

ответ

16

RPM1984, Существует несколько способов решения этой проблемы.

1) Вы можете изменить свой маршрут, чтобы справиться с этим:

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

Это позволит MVC принимать параметры с косыми чертами в них

2) Вы можете изменить стратегию по генерации идентификаторов по умолчанию:

documentStore.Conventions.IdentityPartsSeparator = "-"; 

Это будет генерировать идентификаторы с:

сообщений-1 сообщений-2 т.д.

Смотрите также здесь:

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

+0

Благодаря Ayende - я пойду с вариантом 2. Кстати, я пропустил свой Raven вебинар прошлой ночью, потому что он твердил «Invalid ID, пожалуйста, попробуйте еще раз». :(Любые планы по размещению аудио/видео для вебинара где-то? – RPM1984

+0

Спасибо за ваш ответ –

1

На самом деле вам нужно извлечь целочисленное значение из идентификатора строки на основе документов. Это связано с тем, что ворон может обрабатывать любые идентификаторы, а не только целое число, генерируемое HILO (это значение по умолчанию, если вы не указали идентификатор самостоятельно).

Взгляните на образец RaccoonBlog. Внутри есть вспомогательный класс «RavenIdResolver», из которого очень легко получить числовой идентификатор из идентификатора документов.

3

Вы можете просто использовать ...

int Id; 

..instead из ...

string Id; 

в классах сущностей :)

+0

Нет, вы не можете. Не без изменения настроек Hilo. – RPM1984

+0

Действительно? Позвольте мне дважды проверить – Korayem

+0

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