ASP.NET Razor:将变量作为参数发送

时间:2016-10-21 13:55:25

标签: asp.net asp.net-mvc razor

我的观点包含以下表格定义:

<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>

最后一列中的DetailsEditDelete选项需要按顺序键入AlbumID变量的album属性确保重定向在适当的专辑上运行。我原以为这个参数可能是asp-parameter,就像asp-action设置的操作一样,但这似乎不存在。

将变量作为URL参数传递的正确方法是什么(例如,/Albums/Details/var),以及在另一端使用什么名称来检索它?

Shyju的回答涉及传递参数;我到目前为止检索参数的尝试如下:

<%=Url.RequestContext.RouteData.Values["id"]%> - 无法加载无效字符<

ViewContext.RouteData.Values["id"] - 无法加载,无法使用intobject==进行比较。

RouteData.Values["id"] - 编译错误,当前上下文中不存在名称。

1 个答案:

答案 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
}