如何在 Razor 页面的 Asp.Net Core DevExtreme DataGrid 列中使用 asp-action?

How do I use an asp-action in a Asp.Net Core DevExtreme DataGrid column in a Razor page?

我有一个 Asp.NetCore 使用 C# 编写的 EFC 构建的 Web 应用程序。这些网页是使用 Razor 构建的。我正在尝试在页面中使用 DevExpress DevExtreme DataGrid。

这是我的模型class定义:

public class Owner
{
    [Key]
    public Guid OwnerId { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string PhoneNumber { get; set; }
}

这是我的页面定义:

@model IEnumerable<Owner>
@{ Layout = "_DevExtremeLayout"; ViewBag.Title = "All Owners";}

@(Html.DevExtreme().DataGrid<SmartTracPoc.Models.Owner>()
    .DataSource(Model)
    .RemoteOperations(true)
    .Columns(columns => {
        columns.AddFor(m => m.FirstName);
        columns.AddFor(m => m.LastName);
        columns.AddFor(m => m.PhoneNumber);
        columns.AddFor(m => m.OwnerId).CellTemplate(@<text><form asp-action="DeleteOwner" method="post">
                    <input type="hidden" value="m => m.OwnerId" name="OwnerId" />
                    <input type="image" src="/icon/close.png" />
                </form>
                </text>);       
    })
)

这是来自控制器文件的相关代码片段:

public class OwnerController : Controller
{
    [HttpPost]
    public async Task<IActionResult> DeleteOwner(Guid ownerId)
    {
        try
        {
            var requestString = SmartTrocPocServerAddress + $"Owners/{ownerId.ToString()}";
            var response = await client.DeleteAsync(requestString);
            var responseString = await response.Content.ReadAsStringAsync();
        }
        catch (HttpRequestException ex)
        {
            Debug.WriteLine("OwnerController::DeleteOwner() - exception occured");
            Debug.WriteLine(ex.Message);
        }

        return RedirectToAction("Index");
    }
}

我想在列定义中使用 asp-action 来触发控制器中关联的 Delete 方法。控制器中的 DeleteOwner() 方法已成功触发,但我的 id 参数为 0。

在使用 DevExtreme DataGrid 之前,以下页面定义片段工作正常:

@foreach (var r in Model)
{
 <table>
  <tbody>
   <tr>
    <td>
     <form asp-action="DeleteOwner" method="post">
        <input type="hidden" value="@r.OwnerId" name="OwnerId" />
        <input type="image" src="/icon/close.png" />
     </form>
    </td>
   </tr>
  </tbody>
 </table>
}

如何将 OwnerId 绑定到对我的控制器方法调用的调用上?

试试这个:

<input type="hidden" value="<%- data.OwnerId %>" name="OwnerId" />