Как поставить гиперссылку на другую страницу в соответствии с его идентификатором? - PullRequest
0 голосов
/ 24 мая 2019

Я новичок в ASP.NET MVC и застрял здесь.Я хочу создать гиперссылку, чтобы при нажатии на название фильма он переходил на страницу с подробностями.У меня уже есть @ HTML.ActionLink для класса Details в контроллере, но теперь я не знаю, что добавить в класс Details.Должен ли я создать переменную для класса Index для сравнения?

Это метод действия Index:

public ActionResult Index()
{
        PAPEntities db = new PAPEntities();

        MovieViewModel[] movies = db.MoviesData.Select(movie => new MovieViewModel
        {
            MovieID = movie.MovieID,
            MovieName = movie.MovieName,
            MovieDescription = movie.MovieDescription,
            MovieCategory = movie.MovieCategory,
            MovieYear = movie.MovieYear
        }).ToArray();

        return View(movies);
}

Это часть индекса с @ HTML.ActionLink:

@foreach (var item in Model)
    {
        <tr>
            <td>@Html.ActionLink(item.MovieName, "Details", "Movies", new { id = item.MovieID }, null)</td>
            <td>@item.MovieCategory</td>
            <td>@item.MovieYear
            <td>@item.MoviePrice</td>
        </tr>
    }
</table>

Я пытался найти его, но ничего похожего не появляется, поэтому я немного застрял

Ответы [ 3 ]

1 голос
/ 24 мая 2019

Я полагаю, вы используете ядро ​​asp.net? если это так, вы должны использовать Tag Helpers

Добавьте следующее в _ViewImports.cshtml

@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers

Тогда следующее на вашей странице

<a id="btn" asp-controller="Movies" asp-action="Details" asp-route-id="@item.MovieID">@item.MovieName</a>
0 голосов
/ 24 мая 2019

Если @Html.ActionLink предназначен для попадания в метод Details контроллера Movies, и вы говорите, что:

У меня уже есть @ HTML.ActionLink на класс Details в контроллере, но теперь я не знаю, что добавить в класс Details

Для этого я бы предложил добавить метод «Подробности», подобный этому, в контроллере «Фильмы»:

public ActionResult Details(string id)   // might be 'int' if your MovieId is of integer type
{
    //use LINQ to fetch the movie based on input 'id'

    //return the information with the 'details' view as you did with the 'Index' method
}

Надеюсь, я правильно понял ваш вопрос.

0 голосов
/ 24 мая 2019

Я думаю, что вы путаете class и method.
Код, который вы опубликовали, - это метод Index в классе (я полагаю) MoviesController.
Эта строка

<td>@Html.ActionLink(item.MovieName, "Details", "Movies", new { id = item.MovieID }, null)</td>

создает ссылку на действие Details в контроллере Movies, передавая ему идентификатор.

Итак, вам нужен в вашем классе MoviesController метод Details, имеющий параметр с именемid чтобы получить и использовать его.

public class MoviesController: Controller
{
    // code of other methods

    public ActionResult Details(int id)
    {
        // get details of movie with id
    }
}

Примечание: если вы используете ActionLink в представлении, возвращаемом контроллером Movies, вам не нужно указыватьконтроллер снова, чтобы вы могли написать

@Html.ActionLink(item.MovieName, "Details", new { id = item.MovieID })

, и он будет делать то же самое.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...