如何在 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" />
我有一个 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" />