使用Razor的.NET Core视图-多个相同的路线

时间:2018-12-03 17:00:49

标签: c# razor .net-core asp.net-core-mvc

我正在创建.NET Core API,以从数据库中读取/写入/更新/删除信息。我已经做好了准备,现在我试图合并视图以使外观看起来更好。我使用Visual Studio 2017的脚手架功能来设置一些基本视图。现在,index.cshtml视图起作用了,它显示了数据库每一行的信息以及用于编辑,查看详细信息或删除每一行的选项。这是通过以下三行添加的,将其放入<td>语句中的foreach标记中以循环遍历数据库的结果(item是结果集中每一行从数据库被称为)

<a asp-action="Edit" asp-route-id="@item.id">Edit</a> |
<a asp-action="Details" asp-route-id="@item.id">Details</a> |
<a asp-action="Delete" asp-route-id="@item.id">Delete</a>

到目前为止,唯一对我有用的是详细信息链接,该链接在我的控制器类中使用一个函数,并使我仅查看该特定行。我注意到编辑和详细信息href并没有抓住该行的ID,因此这些链接将我带回到我已经在其中的索引页。通过将鼠标悬停在每个链接上,可以看到每个href设置为-

编辑::localhost:port / api / results

详细信息::localhost:port / api / results / 1 (我相信这是另外两个应该看起来像的东西)

删除::localhost:port / api / results

我已经进行了一些调试/调查,这是我的问题:

  1. 如果多个路由做不同的事情,它们可以具有相同的URI吗?例如,详细信息链接是HttpGet,而删除链接是HttpDelete。如果使用不同的HTTP方法,它们是否都可以具有相同的URI?

  2. 在Razor正确组合路线之前,是否必须有一个控制器可以对给定的路线进行某些操作?

  3. 我错过的所有内容可能是未将ID添加到超链接的原因吗?所有3条编辑/详细信息/删除路线的设置都完全相同,但是ID仅会添加到路线中以获取详细信息,而不是编辑或删除。

1 个答案:

答案 0 :(得分:3)

1)是的,这是正常情况。您可以具有 / results / 1 PUT结果/ 1 删除结果/ 1 POST结果/ 1

2,3) 按照设计,由于GET基本上用于检索数据,因此链接只能将请求发送到GET方法。但是,POST,PUT,DELETE并不是等幂方法,它们通常会修改服务器上实体的状态。 如果要调用POST和DELETE方法,则应使用<form>

要解决此问题,您必须:

  • 创建“编辑”和“删除” GET方法,以返回具有以下内容的网页 所需数据。对于“编辑”,页面应包含<form>和多个输入以修改您的输入。 “删除”通常只需要 <form>具有隐藏的输入(id)。
  • 完成网页后,您可以通过 <form>

看看这个example