如何从URL中获取视图中的当前路由ID(ASP.NET MVC)

时间:2009-06-11 05:46:49

标签: asp.net-mvc

在从/ Controller / Action / 1等URL返回的视图中(假设controller / action / id的默认路由),如何从View中访问ID?

我不想在处理请求时将其添加到操作级别的ViewData字典中。

9 个答案:

答案 0 :(得分:176)

我认为这就是你要找的东西:

<%=Url.RequestContext.RouteData.Values["id"]%>

答案 1 :(得分:15)

ViewData正是这样做的正确方法。

您的另一个选择是将包含ID的模型传递给视图。

编辑:如果不确切知道自己要做什么,很难提供更具体的建议。为什么需要ID,而不是任何其他模型数据?您的控制器真的只是将Id字段发送到视图吗?很难想象这个场景是什么。

如果ID值确实是传递给视图的唯一模型信息,那么您可以使用ID本身作为模型。然后,您的操作方法的返回值为View(id),您不需要使用ViewData。

答案 2 :(得分:3)

将它添加到viewdata是正确的做法。至于如何添加它,你总是可以添加一个自定义ActionFilter,它从路线词典中抓取它并将其推送到viewdata。

答案 3 :(得分:2)

我认为你可以直接在url动作中使用 Url.RequestContext.RouteData.Values [ “ID”]

答案 4 :(得分:1)

我们可以将id作为 Route DataQueryString 传递,因此支持他们我推荐这样做:< / p>

var routeValues=Url.RequestContext.RouteData.Values;
var paramName = "id";
var id = routeValues.ContainsKey(paramName)?
         routeValues[paramName]:
         Request.QueryString[paramName];

答案 5 :(得分:1)

只是我的两分钱,但我总是使用视图模型将任何数据传递给我的视图。即使它像需要像int一样简单。

这样做会使访问此值变得微不足道,因为MVC会为您完成所有工作。

对于我的价值,我通常name我的观点模型如下:

{Controller}{ViewName}ViewModel

这有助于保持大规模的组织。

一个例子:

// ~/ViewModels/HomeEditViewModel.cs
public class HomeEditViewModel
{
  public int Id { get; set; }
}

// ~/Controllers/HomeController.cs
public IActionResult Edit(int id)
{
  return View(new HomeEditViewModel() { Id = id });
}

// ~/Views/Home/Edit.cshtml
@model HomeEditViewModel

<h1>Id: @Model.Id</h1>

答案 6 :(得分:0)

剃刀简单答案:

@Url.RequestContext.RouteData.Values["id"]

答案 7 :(得分:0)

如果您使用的是 .NET Core

使用此代码

Url.ActionContext.RouteData.Values["id"]

答案 8 :(得分:-1)

我刚刚使用<%= model.id %>并且它可以正常工作