首页 > 解决方案 > 从控制器调用正确的方法(MVC,RAZOR)

问题描述

我有BooksController方法Get

[HttpGet]
 public async Task<IActionResult> Get(string name)
{
    @books = await _booksService.BrowseAsync(name);
    return View("books",@books);
}

并查看books.cshtml

@model IEnumerable<WebPart.Infrastructure.DTO.BooksDto>
@foreach (var item in Model)
{
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.Name)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Price)
        </td>
            @Html.ActionLink("Edit", "get", new { id = item.Id })
        <br />
    </tr>
}

当我尝试“单击”链接“编辑”时,我遇到了问题二,运行我的第二个 get 方法并打开视图编辑

[HttpGet("{booksId}")]
public async Task<IActionResult> Get(Guid booksId)
{
    var @books = await _booksService.GetAsync(booksId);
    return View("edit", @books);            
}

这两个方法GET在同一个BooksController中。

我在这里做错了什么?因为它总是运行第一个GET方法。

标签: asp.netasp.net-mvcweb-servicesrazorcontroller

解决方案


您的控制器操作需要一个名为booksId

[HttpGet("{booksId}")]
public async Task<IActionResult> Get(Guid booksId)

您正在发送一个名为id

@Html.ActionLink("Edit", "get", new { id = item.Id })

名称需要匹配。如果需要调用参数booksId,调用它booksId

@Html.ActionLink("Edit", "get", new { booksId = item.Id })

推荐阅读