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的教程,但是我也无法正常工作。这似乎是一件简单且非常常见的事情,因为我认为大多数表都具有多键。
有没有一种我看不到的简单方法?我觉得我想得太多了。
谢谢!
答案 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);
}
记住按键的顺序很重要。希望对我有帮助!