从控制器调用正确的方法(MVC、RAZOR)

Call correct method from Controller (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>
}

当我尝试 "click" link "Edit" 我有问题二 运行 我的第二个 get 方法和打开视图 edit:

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

这两个方法GET在同一个BooksController.

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

您的控制器操作需要一个名为 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 })

试试这个:

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