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

MVC5 Details/Edit/Delete with Multi-Key Table

提问人:ExecChef 提问时间:8/1/2018 更新时间:8/1/2018 访问量:460

问:

MVC5 很新,但很快就取得了进展。这个小问题让我难住了,似乎没有太多关于 Goolge 的信息(或者我没有问 Google 正确的问题)。

我有一张桌子 (FILE_RCPTS_LOG) 此表具有多键 (2) 第一个键是字段:TRACK_NMBR (int)
第二个键是字段:TRANS_DT(日期)

当我创建 Controller 时,还创建了默认视图。在大多数情况下,它们工作正常。但是,在尝试使用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 的教程,但我也无法让它工作。这似乎是一件简单且非常普遍的事情,因为我认为大多数表都有多键。

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

谢谢!!!

C# ASP.NET-MVC-5 多键

评论


答:

1赞 Tomato32 8/1/2018 #1

你可以按照这个。第一个,在 ActionLink 中,将所有 2 个键值作为逗号分隔的字符串传入。例如,在“详细信息”操作中:

@Html.ActionLink("Details", "Details", new {id= @item.TRACK_NMBR +','[email protected]_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 [email protected]_DT});

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

请记住,键的顺序很重要。希望能帮到你,我的朋友!

评论

0赞 ExecChef 8/1/2018
嗨,Tomato32!感谢您的回复。我继续按照您的描述修改了 ActionLink。在这一点上,我立即收到一个错误,我不能将运算符“+”与 Int 和 DateTime 一起使用。
0赞 Tomato32 8/1/2018
@ExecChef。Tr:id= @item。TRACK_NMBR。ToString() +','[email protected]_DT。ToString()
0赞 ExecChef 8/1/2018
完善!最后一件事。现在,回到我的控制器中......添加解析后,我收到不同的错误。错误:“int?”不包含“Split”的定义,并且找不到接受“int”类型的第一个参数的扩展方法“Split”(您是否缺少程序集或引用?我是否需要添加引用才能使用 Split?或者我的班级有错误吗? .public async Task<ActionResult> Details(int?)
0赞 Tomato32 8/1/2018
@ExecChef:更改详细信息(字符串 id)。
0赞 ExecChef 8/1/2018
谢谢Tomato32。快到了。此时,我从客户端(:)检测到潜在危险的 Request.Path 值。' 错误。这是 url 字符串的内容:Base/Details/62%2c10/1/2013%2012%3a00%3a00%20AM。它应该传递的参数是Track_Nmbr: 62 Trans_Dt: 2013-10-01
1赞 Ibrahim Malluf 8/1/2018 #2

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

评论

0赞 ExecChef 8/2/2018
@Ibraham Malluf:谢谢你的回复。我认为您的答案对将来的使用是有益的,我将学习如何做到这一点,因为它看起来很简单。谢谢