RavenDb с ASP.NET MVC 3 - Как создать URL с идентификатором?
Это, наверное, очень простой ответ, но я новичок в RavenDb, поэтому я, очевидно, что-то пропустил.
У меня есть базовый объект со стандартным соглашением для id:
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
Это не то, что я хочу.
Неужели мне не нужно делать строковые манипуляции? Как люди подходят к этому?
Ответы
Ответ 1
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
Ответ 2
Вы можете просто использовать...
int Id;
.. вместо...
string Id;
в классах сущностей:)
Ответ 3
На самом деле вам нужно извлечь целочисленное значение из идентификатора строки на основе документов. Это связано с тем, что ворон может обрабатывать любые идентификаторы, не обязательно генерируемые HILO целыми числами (это значение по умолчанию, если вы не указываете id по своему усмотрению).
Взгляните на образец RaccoonBlog. Внутри есть вспомогательный класс "RavenIdResolver", из которого очень легко получить числовой идентификатор из идентификатора документов.