我的观点包含以下表格定义:
<table>
<thead>
<th>Title</th>
<th>Artist</th>
<th>Genre</th>
<th>Price</th>
</thead>
@foreach (var album in Model)
{
<tr>
<td>@album.Title</td>
<td>
@{
foreach (var artist in ViewBag.Artists)
{
if (artist.ArtistID == album.ArtistID)
{ @artist.Name }
}
}
</td>
<td>
@{
foreach (var genre in ViewBag.Genres)
{
if (genre.GenreID == album.GenreID)
{ @genre.Name }
}
}
</td>
<td>@album.Price</td>
<td>
<a asp-action="Details" asp-controller="Albums">Details </a>
<a asp-action="Edit" asp-controller="Albums">Edit </a>
<a asp-action="Delete" asp-controller="Albums">Delete</a>
</td>
</tr>
}
</table>
最后一列中的Details
,Edit
和Delete
选项需要按顺序键入AlbumID
变量的album
属性确保重定向在适当的专辑上运行。我原以为这个参数可能是asp-parameter
,就像asp-action
设置的操作一样,但这似乎不存在。
将变量作为URL参数传递的正确方法是什么(例如,/Albums/Details/var
),以及在另一端使用什么名称来检索它?
Shyju的回答涉及传递参数;我到目前为止检索参数的尝试如下:
<%=Url.RequestContext.RouteData.Values["id"]%>
- 无法加载无效字符<
。
ViewContext.RouteData.Values["id"]
- 无法加载,无法使用int
与object
和==
进行比较。
RouteData.Values["id"]
- 编译错误,当前上下文中不存在名称。
答案 0 :(得分:1)
使用链接标记帮助程序时,可以使用asp-route-[paramName]
属性将其他信息传递给操作方法。例如,如果您要将相册ID传递给详细信息操作方法的id
参数,则可以执行此操作
<a asp-action="Details" asp-controller="Albums" asp-route-id="@album.ID">Details </a>
这将生成如下所示的标记
<a href='/Albums/Details/101'>Details</a>
101
将替换为实际的相册ID值。
假设您的Details操作方法有一个名为id
的参数
public ActionResult Details(int id)
{
// to do : Get the album using the id and send something to the view
}