使用此按鈕時
<a onclick="location.href='@Url.Action("Update", "Book", new { id = @Model.Id })'"
class="btn btn-primary">Edit</a>
控制器確實命中了 get 方法
[HttpGet]
[Route("{id}")]
public ActionResult Update(int id) {...}
但是 Url 不再匹配路由 {controller}/{action},它只是顯示這樣的 id
https://localhost:44345/1
uj5u.com熱心網友回復:
當您在端點上使用 [Route()] 屬性時,您將覆寫整個路由,這就是洗掉控制器名稱部分的原因。我想您這樣做的原因是與現有的GET操作發生沖突。
您似乎正在使用GET請求來更新您的物體。而是根據場景使用POST或PUT(https://www.w3schools.com/tags/ref_httpmethods.asp)并相應地更新您的HttpGet屬性。
[HttpPost]
// or
[HttpPut]
并確保您的控制器類上有一個如下所示的路由屬性:
[Route("[controller]")]
public class BookController : ControllerBase
這將確保包含路由的控制器部分,因此格式為:.../{controllerName}/{id}
注意:如果您想堅持使用GET并且有多個相同 HTTP 訊息型別的請求,那么您可以通過更新 [HttpGet] 屬性而不是添加 [Route] 屬性來路由到正確的操作:
[HttpGet("update/{id}")]
這將為您的網址提供以下格式.../{controllerName}/update/{id}
uj5u.com熱心網友回復:
你可以使用 ancor 助手
<a asp-action="Update" asp-controller="Book" asp-route-id="@Model.Id" class="btn btn-primary">Edit</a>
uj5u.com熱心網友回復:
如果您使用Route屬性,它將覆寫路由模板。
因此,如果您使用 ASP.NET Core MVC,則需要使用如下所示的路由模板:
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
});
您的控制器應該是:
public class BookController : Controller
{
[HttpGet]
public ActionResult Update(int id) {
return View();
}
}
然后 Url.Action 應該按預期作業:https://localhost:44345/Book/Update/1
<a onclick="location.href='@Url.Action("Update", "Book", new { id = @Model.Id })'"
class="btn btn-primary">Edit</a>
如果您使用 ASP.NET Core WebApi,控制器應如下所示:
[Route("[controller]/[action]")]
[ApiController]
public class BookController : ControllerBase
{
[HttpGet]
[Route("{id}")]
public ActionResult Update(int id) => Ok();
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/372572.html
標籤:C# asp.net-mvc asp.net核心 网址 路线
上一篇:從LINQ查詢中檢索單個元素
下一篇:ASP.NETCore-如何將IdentityDbContext中的ApplicationUserid作為UserId插入到員工模型中
