在从/ Controller / Action / 1等URL返回的视图中(假设controller / action / id的默认路由),如何从View中访问ID?
我不想在处理请求时将其添加到操作级别的ViewData字典中。
答案 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 Data
或QueryString
传递,因此支持他们我推荐这样做:< / 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 %>
并且它可以正常工作