asp.net-mvc - RavenDB Id 和 ASP.NET MVC3 路由

标签 asp.net-mvc asp.net-mvc-3 actionlink ravendb

只需使用 MVC 3 RC2 和 RavenDB 构建一个快速、简单的站点来测试一些东西。

我已经能够制作一堆项目,但我很好奇 Html.ActionLink() 如何处理 raven DB ID。

我的示例:我有一个名为“原因”的文档(某些原因的原因,主要是文本),其中包含原因文本和链接列表。我可以通过我的存储库添加、删除和完成其他一切。

下面是我的 razor View 的一部分,它在项目符号列表中列出了每个原因,其中一个编辑链接作为第一个文本:

@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 保存为“原因/1”。

因此,当 URL 发生并传递 ID 时,生成的路由是“http://localhost:4976/Reasons/Edit/reasons/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);

你不需要扩展方法,这样你就不需要像上面提到的那样改变任何路由,因为你将处理好的整数。字符串 Id 几乎是一个交易破坏者,但令人惊讶的是,这有效,因此 RavenDB 又回来了。
  • 注意:我是通过观看 Rob Ashton 的演讲并意识到他的所有文档类都将整数作为 Id 来发现这一点的。
  • 关于asp.net-mvc - RavenDB Id 和 ASP.NET MVC3 路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4527870/

    相关文章:

    javascript - 如何将 web 配置中的值读取到 vue js 代码中

    Linq 查询在没有任何明显原因的情况下被多次触发

    c# - 从表中读取数据并将其传递给asp.net mvc3中的 Controller

    c# - Entity Framework : An object with the same key already exists in the objectstatemanager

    c# - 是否可以使用包含元素的 ActionLink?

    asp.net-mvc - ASP.NET MVC - 如何获取 URL 而不是操作链接?

    c# - 包含特定字符的 ActionLink 路由值

    css - 为什么我的 div 框会忽略我的 css 代码?

    asp.net-mvc - ASP.NET MVC 中的 ViewModel 实现 - 这段代码是最佳实践吗?

    javascript - 如何使用javascript在mvc项目中播放mp3文件?