提问人:ExecChef 提问时间:8/1/2018 更新时间:8/1/2018 访问量:460
MVC5 详细信息/使用多键表编辑/删除
MVC5 Details/Edit/Delete with Multi-Key Table
问:
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 的教程,但我也无法让它工作。这似乎是一件简单且非常普遍的事情,因为我认为大多数表都有多键。
有没有一种我没有看到的简单方法?我觉得我想多了。
谢谢!!!
答:
你可以按照这个。第一个,在 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);
}
请记住,键的顺序很重要。希望能帮到你,我的朋友!
评论
假设您正在向视图传递一个模型,只需在操作链接中返回该模型即可。那么你将拥有你需要知道的一切,包括两个主键。
评论
上一个:终止子进程的子进程
下一个:减去两个 ViewBag 值
评论