【问题标题】:MVC5 Details/Edit/Delete with Multi-Key TableMVC5 详细信息/编辑/删除与多键表
【发布时间】:2018-08-01 13:18:09
【问题描述】:

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

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

谢谢!!!

【问题讨论】:

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


    【解决方案1】:

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

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

    在Details ActionController中,你需要解析出2个key中的每一个。

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

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

    【讨论】:

    • 嗨番茄32!感谢您的回复。我继续按照您的描述修改了 ActionLink。那时我收到一个即时错误,我无法将运算符“+”与 Int 和 DateTime 一起使用。
    • @ExecChef。 Tr: id= @item.TRACK_NMBR.ToString() +','+@item.TRANS_DT.ToString()
    • 完美!最后一件事。现在,回到我的控制器中。 . .添加解析后,我收到不同的错误。错误:'int?不包含“Split”的定义,并且找不到接受“int”类型的第一个参数的扩展方法“Split”(您是否缺少程序集或引用?)。我是否需要添加参考才能使用拆分?或者我的课上是否有错误。 . .公共异步任务 详细信息(int?)
    • @ExecChef:更改详细信息(字符串 id)。
    • 感谢 Tomato32。差不多好了。此时,我收到“从客户端检测到潜在危险的 Request.Path 值 (:)。 ' 错误。这是 url 字符串的内容:Base/Details/62%2c10/1/2013%2012%3a00%3a00%20AM。它应该传递的参数是 Track_Nmbr: 62 Trans_Dt: 2013-10-01
    【解决方案2】:

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

    【讨论】:

    • @Ibraham Malluf:感谢您的回复。我认为您的回答对将来的使用很有帮助,我将学习如何做到这一点,因为它看起来很简单。谢谢
    猜你喜欢
    • 2015-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多