RavenDb с ASP.NET MVC 3 — как сгенерировать URL-адрес с идентификатором?

Это, вероятно, очень простой ответ, но я новичок в RavenDb, поэтому я явно что-то упускаю.

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

public string Id { get; set; }

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

сообщений/123

Это хорошо, но... как мне сгенерировать такой URL:

www.mysite.com/edit/123

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

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

Он сгенерирует следующий URL-адрес:

www.mysite.com/edit/posts/123

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

Конечно, мне не нужно делать манипуляции со строками? Как люди относятся к этому?


person RPM1984    schedule 09.09.2011    source источник


Ответы (3)


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

person Ayende Rahien    schedule 09.09.2011
comment
Спасибо, Айенде. Я выберу вариант 2. Кстати, прошлой ночью я пропустил ваш веб-семинар Raven, потому что он постоянно говорил «Неверный идентификатор». Пожалуйста, попробуйте еще раз. :( Планируете ли вы где-нибудь разместить аудио/видео вебинара? - person RPM1984; 10.09.2011

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

int Id;

..вместо ...

string Id;

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

person Korayem    schedule 26.02.2012
comment
Нет, ты не можешь. Не без изменения настроек Hilo. - person RPM1984; 27.02.2012
comment
элегантное простое решение! ;-) Я люблю это! - person Yooakim; 02.02.2014

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

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

person Daniel Lang    schedule 09.09.2011