首页 > 解决方案 > 如何从 url 访问当前路由参数并在 asp.net 视图页面上引用它

问题描述

我刚刚做了一条新路线:

  routes.MapRoute(
  name: "example",
  url: "{example}/{details}/{id}",
  defaults: new { controller = "example", action = "Index", id = UrlParameter.Optional }
  );

该路线运行良好,但我不知道如何引用我当前所在的“id”,因此我可以在我的“详细信息”视图页面上显示路线上所说的“id”的正确信息。

对于更多上下文,我有我的基本“示例”页面,我在其中显示来自数据库的用户,每个用户都有一个与他们关联的“ID”,当他们的名字被点击时,它会抓取所说的“ID”并转到 /example/ details/{user id I just clicked}(这可行)现在我需要知道如何显示所述路线的用户信息。

控制器:

public ActionResult Details()
{
    var example = from a in db.Example
                  where a.ExamplePresent
                  orderby a.ExampleName
                  select a;
    return View(example.ToList());
}

看法:

@model List<Example.Areas.ExamplePage.Models.Example>
@{
    ViewBag.Title = "Example Page";
}

标签: c#asp.net-mvcroutesroutedata

解决方案


如果您不想为这种情况创建视图模型,您可以通过 tuple 将 id 参数和列表传递给视图,并在视图中引用它,如下所示:

public IActionResult Details(int id)
{

    var example = from a in db.Example
              where a.ExamplePresent
              orderby a.ExampleName
              select a;
    return View(Tuple.Create(id, example.ToList()));
}

看法

@model Tuple<int, List<Example.Areas.ExamplePage.Models.Example>>

@{
    ViewData["Title"] = "Details";
}

<h2>id: @Model.Item1</h2>

您的示例列表是:

@Model.Item2

更合适的方法是为详细信息视图创建视图模型并通过视图模型传递您的值:

视图模型:

public class DetailsViewModel
{
    public int Id {get;set;}
    public IList<Example.Areas.ExamplePage.Models.Example> Examples {get;set;}
}

行动:

public IActionResult Details(int id)
{

    var example = from a in db.Example
          where a.ExamplePresent
          orderby a.ExampleName
          select a;
    return View(new DetailsViewModel{ Id = id, Examples = example.ToList() });
}

看法:

@model DetailsViewModel

@{
    ViewData["Title"] = "Details";
}

<h2>id: @Model.Id</h2> // your list is @Model.Examples

推荐阅读