MVC5详细信息/编辑/使用多键表删除

时间:2018-08-01 13:18:09

标签: c# asp.net-mvc-5 multikey

MVC5相当新,但很快就获得了发展。这个小问题让我感到困惑,并且关于Goolge的信息似乎很少(或者我不是在问Google正确的问题)。

我有一个表(FILE_RCPTS_LOG) 该表具有多个键(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 */ }) 

这很好,如果我的桌子只有一把钥匙。但是如何传递两个密钥?

我在网上发现的一些解决方案对于这样一个简单的操作似乎很复杂。我想我这里缺少明显的东西。 。

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

  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的教程,但是我也无法正常工作。这似乎是一件简单且非常常见的事情,因为我认为大多数表都具有多键。

有没有一种我看不到的简单方法?我觉得我想得太多了。

谢谢!

2 个答案:

答案 0 :(得分:1)

假设您要传递视图模型,只需在操作链接中返回模型即可。那么您将拥有所有需要知道的内容,包括两个主键。

答案 1 :(得分:0)

您可以按照此操作。第一个是ActionLink中的所有两个键值,以逗号分隔的字符串形式传入。例如,在“详细信息”操作中:

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

在“详细信息ActionController”中,您需要解析出这两个键中的每一个。

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);
}

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