MVC5 Details/Edit/Delete 带多键 Table
MVC5 Details/Edit/Delete with Multi-Key Table
对 MVC5 来说还很陌生,但发展迅速。这个小问题把我难住了,关于 Goolge 的信息似乎不多(或者我没有问 Google 正确的问题)。
我有一个Table (FILE_RCPTS_LOG)
这个 table 有多个键 (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 */ })
要是我的table只有一把钥匙就好了。但是我如何传递这两个密钥呢?
对于这样一个简单的操作,我在网上找到的几个解决方案似乎太复杂了。我想我在这里遗漏了一些明显的东西。 . .
这是我的控制器的代码(详细信息)
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 的教程,但我也无法使其正常工作。这似乎是一件如此简单且非常普遍的事情,因为我认为大多数 table 都有多键。
有没有我没有看到的简单方法?感觉自己多虑了
谢谢!!!
你可以关注这个。首先,在 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);
}
记住按键的顺序很重要。希望对朋友有帮助!
假设您正在向视图传递模型,只需 return 动作中的模型 link。那么您将拥有您需要知道的一切,包括两个主键。
对 MVC5 来说还很陌生,但发展迅速。这个小问题把我难住了,关于 Goolge 的信息似乎不多(或者我没有问 Google 正确的问题)。
我有一个Table (FILE_RCPTS_LOG)
这个 table 有多个键 (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 */ })
要是我的table只有一把钥匙就好了。但是我如何传递这两个密钥呢?
对于这样一个简单的操作,我在网上找到的几个解决方案似乎太复杂了。我想我在这里遗漏了一些明显的东西。 . .
这是我的控制器的代码(详细信息)
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 的教程,但我也无法使其正常工作。这似乎是一件如此简单且非常普遍的事情,因为我认为大多数 table 都有多键。
有没有我没有看到的简单方法?感觉自己多虑了
谢谢!!!
你可以关注这个。首先,在 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);
}
记住按键的顺序很重要。希望对朋友有帮助!
假设您正在向视图传递模型,只需 return 动作中的模型 link。那么您将拥有您需要知道的一切,包括两个主键。