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

在从 URL (例如/Controller/Action/1)返回的视图中(假设控制器/Action/ID 的默认路由) ,我如何从视图中访问 ID?

在处理请求时,我不希望将它添加到操作级别的 ViewData 字典中。

67168 次浏览

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

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

编辑: 没有确切的知道你想做什么,很难给出更具体的建议。为什么需要 ID,而不需要其他模型数据?您的控制器真的只向视图发送 Id 字段吗?很难想象会发生什么。

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

将它添加到 viewdata 是正确的做法。至于如何添加它,您总是可以添加一个自定义 ActionFilter,它可以从路由字典中获取它,并将它推送到视图数据中。

我想这就是你要找的:

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

我们可以通过 id作为 ABC1或 QueryString,所以对于 支持他们两个我建议这样:

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

我认为你可以直接在 url 动作中使用 值[“ id”]

这只是我个人的看法,但是我总是使用视图模型来将任何数据传递给我的视图。即使只是简单地需要一个 int,比如 id。

这样做使得访问这个值变得微不足道,就像 MVC 为您做的所有工作一样。

值得一提的是,我通常使用 姓名视图模型:

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

Razor 的简单回答:

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

在 ASP.NET 核心中

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

如果您使用的是 .NET 核心

用这个密码

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