只需建立一个快速,简单的网站与MVC 3 RC2和RavenDB来测试一些事情.
我已经能够做一些项目,但我很好奇Html.ActionLink()如何处理一个raven数据库ID.
我的例子:我有一个称为“原因”的文档(一些原因,主要是文本),它具有原因文本和链接列表.我可以通过我的存储库添加,删除和做任何其他的事情.
以下是我的剃须刀视图的一部分,其中列出了项目符号列表中的每个原因,并使用“编辑”链接作为第一个文本:
@foreach(var Reason in ViewBag.ReasonsList) { <li>@Html.ActionLink("Edit","Reasons","Edit",new { id = Reason.Id },null) @Reason.ReasonText</li> <ul> @foreach (var reasonlink in Reason.ReasonLinks) { <li><a href="@reasonlink.URL">@reasonlink.URL</a></li> } </ul> }
问题
这个工作正常,除了编辑链接.虽然这里的值和代码似乎直接工作(即链接直接触发),但RavenDB将我的文档ID保存为“reason / 1”.
因此,当URL发生并通过ID时,生成的路由为“http:// localhost:4976 / Reasons / Edit / reason / 2”.所以,ID被正确附加,但是MVC将其解释为它自己的路由.
关于我如何能够解决这个问题的任何建议?我需要创建一个特殊的路线来处理它,还是有其他可以做的?
解决方法
我刚刚下载了最新版本的RavenDB,并尝试了这一点.
public class Entity { public int Id { get;set; } public string Text { get;set; } }
当我将其保存到RavenDB中时,Raven中的ID为“entities / 1”,但是RavenDB客户端中的映射能够将Id从数据库中的内容成功解释为我想要的整数.
var entity = session.Load<Entity>(1); Assert.IsTrue(entity.Id == 1);
您不需要扩展方法,这样您就不需要像上述那样更改任何路由,因为您将处理好的整数.字符串Ids几乎是一个交易破坏者,但令人惊讶的是,这是工作,所以RavenDB回到了狩猎.
>注意:我从观看罗伯·阿什顿讲话中想出这一点,并意识到他所有的文档类都具有整数作为Ids.