4

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

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

谢谢!!!

4

2 回答 2

1

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

于 2018-08-01T14:07:49.770 回答
1

你可以按照这个。第一个,在 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);
}

记住键的顺序很重要。希望对你有所帮助,我的朋友!

于 2018-08-01T13:45:15.167 回答