【问题标题】:.NET Core views using Razor- Multiple same routes.NET Core 视图使用 Razor - 多个相同的路由
【发布时间】:2019-05-05 00:30:43
【问题描述】:

我正在创建一个 .NET Core API 来读取/写入/更新/删除数据库中的信息。我已经建立了骨骼,现在我正在尝试合并视图以使事情看起来更好。我使用 Visual Studio 2017 的脚手架功能来设置一些基本视图。现在,index.cshtml 视图有效,它显示来自数据库每一行的信息以及编辑、查看详细信息或删除每一行的选项。这是通过以下 3 行添加的,它们被放入 foreach 语句中的 <td> 标记中以循环遍历数据库的结果(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 条 edit/details/delete 路由设置完全相同,但 ID 仅添加到路由中以获取详细信息,而不是编辑或删除。

【问题讨论】:

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


    【解决方案1】:

    1) 是的,这是正常情况。您可以有 /results/1PUT results/1DELETE results/1POST results/1

    2,3) 按照设计,链接只能向 GET 方法发送请求,因为 GET 基本上用于检索数据。但是,POST、PUT、DELETE 并不是幂等方法,它们通常会修改服务器上实体的状态。 如果你想调用 POST 和 DELETE 方法,你应该使用&lt;form&gt;

    要解决问题,您必须:

    • 创建“编辑”和“删除”GET 方法返回一个网页 所需的数据。对于“编辑” - 页面应包含 &lt;form&gt; 和几个输入以修改您的输入。 “删除”通常只需要 &lt;form&gt; 带有隐藏输入 (id)。
    • 完成网页后,您可以通过 &lt;form&gt;

    看看这个example

    【讨论】:

    • 因此,如果允许我构建多个相同的href,只要它们做不同的事情,知道为什么编辑和删除链接没有将ID附加到路由吗?
    • @Hollywood,添加了如何解决您的问题的答案。很快 - 在 href 中只能使用 get 方法。按照设计,链接只能用于检索信息。
    • 这是有道理的,并解释了我的部分问题。还有一个问题,如果编辑、详细信息和删除 URI 都是“结果/{id}”,我如何判断我的 API 使用哪种 HTTP 方法?我按照您链接的教程中所示实现了删除,但现在删除链接只是将我带到我的详细信息页面。我猜这个问题的根源是两个链接都有相同的href
    • @Hollywood 告诉女巫使用 HTTP 方法您可以应用多种方法:在
      中将属性方法设置为 POST 或 GET(其他方法在表单中不起作用)。要发送 Delete 或 PUT,您应该使用 js,api.jquery.com/jQuery.ajax
    • 对于删除,您还可以创建其他 POST(使用另一个 url)方法,该方法删除一个实体,然后将您发送回索引页面。
    猜你喜欢
    • 2019-03-25
    • 1970-01-01
    • 2019-07-05
    • 1970-01-01
    • 2018-07-20
    • 2015-01-08
    • 2020-10-27
    • 1970-01-01
    • 2020-05-08
    相关资源
    最近更新 更多