MVC5 Details/Edit/Delete 带多键 Table

MVC5 Details/Edit/Delete with Multi-Key Table

对 MVC5 来说还很陌生,但发展迅速。这个小问题把我难住了,关于 Goolge 的信息似乎不多(或者我没有问 Google 正确的问题)。

我有一个Table (FILE_RCPTS_LOG) 这个 table 有多个键 (2)
第一个键是字段:TRACK_NMBR (int) 第二个键是字段:TRANS_DT(日期)

当我创建控制器时,也创建了默认视图。在大多数情况下,它们工作正常。但是,当我尝试使用 Edit\Delete\Details 链接

时,我收到了 HttpNotFound 错误
@Html.ActionLink("Edit", "Edit", new { /* id=item.PrimaryKey */ }) |
@Html.ActionLink("Delete", "Delete", new { /* id=item.PrimaryKey */ }
@Html.ActionLink("Details", "Details", new {/* id=item.PrimaryKey */ }) 

要是我的table只有一把钥匙就好了。但是我如何传递这两个密钥呢?

对于这样一个简单的操作,我在网上找到的几个解决方案似乎太复杂了。我想我在这里遗漏了一些明显的东西。 . .

这是我的控制器的代码(详细信息)

  public async Task<ActionResult> Details(int? id, DateTime id2)
    {

        if (id == null)
        {
            return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
        }
        FILE_RCPTS_LOG fILE_RCPTS_LOG = await db.FILE_RCPTS_LOG.FindAsync(id);
        if (fILE_RCPTS_LOG == null)
        {
            return HttpNotFound();
        }
        return View(fILE_RCPTS_LOG);
    }

我尝试了几种传递多个密钥的方法,但没有任何效果。我已经阅读了一些有关使用 SPLIT 的教程,但我也无法使其正常工作。这似乎是一件如此简单且非常普遍的事情,因为我认为大多数 table 都有多键。

有没有我没有看到的简单方法?感觉自己多虑了

谢谢!!!

你可以关注这个。首先,在 ActionLink 中,将所有 2 个键值作为逗号分隔的字符串传递。例如在详细操作中:

@Html.ActionLink("Details", "Details", new {id= @item.TRACK_NMBR +','+@item.TRANS_DT});

在Details ActionController中,需要将2个键分别解析出来。

string[] splitid = id.Split(',');
            FILE_RCPTS_LOG obj = db.FILE_RCPTS_LOG.Find(Convert.ToInt32(splitid[0]),Convert.ToDateTime(splitid[1]));

或者您可以传递 2 个参数作为您的解决方案:

@Html.ActionLink("Details", "Details", new {id= @item.TRACK_NMBR, id2 =@item.TRANS_DT});

public async Task<ActionResult> Details(int? id, DateTime id2)
{
FILE_RCPTS_LOG obj = db.FILE_RCPTS_LOG.Find(id, id2);
}

记住按键的顺序很重要。希望对朋友有帮助!

假设您正在向视图传递模型,只需 return 动作中的模型 link。那么您将拥有您需要知道的一切,包括两个主键。