【问题标题】:How do I set the asp-route-id for an asp-action embedded in a CellTemplate of a Asp.Net Core DevExtreme DataGrid?如何为嵌入在 Asp.Net Core DevExtreme DataGrid 的 CellTemplate 中的 asp-action 设置 asp-route-id?
【发布时间】:2021-04-19 15:49:22
【问题描述】:

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

这是我的模型类定义:

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)
    .AllowColumnReordering(true)
    .RowAlternationEnabled(true)
    .ShowBorders(true)
    .OnContentReady("contentReady")
    .Paging(p => p.PageSize(10))
    .Pager(p => p
        .ShowPageSizeSelector(true)
        .AllowedPageSizes(new[] { 10, 25, 50, 100 })
    )
    .SearchPanel(s => s
        .Visible(true)
        .HighlightCaseSensitive(true)
    )
    .GroupPanel(g => g.Visible(true))
    .Grouping(g => g.AutoExpandAll(false))
    .Columns(columns => {

        columns.AddFor(m => m.FirstName);
        columns.AddFor(m => m.LastName);
        columns.AddFor(m => m.PhoneNumber);
        columns.AddFor(m => m.OwnerId).CellTemplate(@<text> <a asp-action="UpdateOwner" asp-route-id="m => m.OwnerId"><img src="/icon/edit.png" /></a>);        
    })
)

以下是控制器文件中的相关代码 sn-p:

public class OwnerController : Controller
{
    public async Task<IActionResult> UpdateOwner(Guid id)
    {
        Owner owner = new Owner();

        try
        {
            var requestString = ServerAddress + $"Owners/GetRecordById{id.ToString()}";
            var response = await client.GetAsync(requestString);
            var responseString = await response.Content.ReadAsStringAsync();
            owner = JsonConvert.DeserializeObject<Owner>(responseString);
        }
        catch (HttpRequestException ex)
        {
            Debug.WriteLine(ex.Message);
        }
        return View(owner);
    }
}

我想在列定义中使用锚标记以使用 OwnerId 链接到另一个页面。 我尝试在列定义中使用 CellTemplate 来做到这一点:

columns.AddFor(m => m.OwnerId).CellTemplate(@<text> <a asp-action="UpdateOwner" asp-route-id="m => m.OwnerId"><img src="/icon/edit.png" /></a>);

目前,该链接触发控制器中的异步方法UpdateOwner(),但id参数为0。

如何在 CellTemplate 定义中为锚标签设置 asp-route-id?

【问题讨论】:

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


    【解决方案1】:

    我现在还没有语法,但你可以试试这个:

     columns.AddFor(m => m.OwnerId)
            .cellTemplate(@<text>
                          function(element, info) {
                             element.append('<a asp-action=\"UpdateOwner\" asp-route-id="' + info.ownerId + '\"><img src=\"/icon/edit.png\" /></a>')
                          }
                          </text>);
    

    这不是最好的方法。如果需要,您可以在调用 JavaScript 函数的“操作列”中注册点击事件或按钮。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-08
      • 2019-04-10
      • 2022-01-26
      • 1970-01-01
      相关资源
      最近更新 更多