【问题标题】:How do I put an hyperlink to another page according with his ID?如何根据他的 ID 将超链接放置到另一个页面?
【发布时间】:2019-05-24 08:11:02
【问题描述】:

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

我试图搜索它,但没有出现类似的东西,所以我有点卡住了

【问题讨论】:

    标签: c# asp.net-mvc razor


    【解决方案1】:

    我假设您使用的是 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>
    

    【讨论】:

    • 我没有 _ViewImports.cshtml 文件。我搜索了一下,看来我要安装一些东西,它是什么?
    • 是的,抱歉,从 nuget 安装 Microsoft.AspNetCore.Mvc.TagHelpers
    • 是的,我做到了。但是文件没有出现。我需要做点别的吗?
    • 您可以在 Views 下创建一个 cshtml 文件。然后添加 Tag Helper @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
    • 如果你卡住了,这里有一个链接learnrazorpages.com/razor-pages/files/viewimports
    【解决方案2】:

    如果@Html.ActionLink 是为了命中Movies 控制器的Details 方法,而你这样说:

    我已经有 @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
    }
    

    希望我没有正确回答您的问题。

    【讨论】:

      【解决方案3】:

      我认为您混淆了classmethod
      您发布的代码是类上的方法Index(我猜)MoviesController
      这一行

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

      在控制器Movies 中创建一个指向动作Details 的链接,并将ID 传递给它。

      因此,您需要在您的类 MoviesController 中使用方法 Details 并具有一个名为 id 的参数来获取并使用它。

      public class MoviesController: Controller
      {
          // code of other methods
      
          public ActionResult Details(int id)
          {
              // get details of movie with id
          }
      }
      

      旁注:如果您在Movies 控制器返回的视图中使用ActionLink,则无需再次指定控制器,您可以编写

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

      它也会这样做。

      【讨论】:

        猜你喜欢
        • 2010-11-18
        • 2016-03-24
        • 2016-04-21
        • 2015-06-10
        • 2013-12-13
        • 1970-01-01
        • 2019-11-19
        • 2014-05-17
        • 2015-05-03
        相关资源
        最近更新 更多