代码之家  ›  专栏  ›  技术社区  ›  JMS

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

  •  75
  • JMS  · 技术社区  · 15 年前

    在从URL(如/controller/action/1)返回的视图中(假定为controller/action/id的默认路由),如何从视图中访问该id?

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

    7 回复  |  直到 7 年前
        1
  •  174
  •   Francisco    15 年前

    我想这就是你要找的:

    <%=Url.RequestContext.RouteData.Values["id"]%>
    
        2
  •  15
  •   CoderDennis    15 年前

    VIEWDATA正是实现这一点的正确方法。

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

    编辑: 不知道你要做什么,就很难给出更具体的建议。为什么您需要一个ID,而不需要任何其他模型数据?您的控制器真的只是将ID字段发送到视图吗?很难想象会发生什么情况。

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

        3
  •  3
  •   Wyatt Barnett    15 年前

    将其添加到视图数据是正确的操作。至于如何添加,您可以始终添加自定义 ActionFilter 它从路由字典中获取并将其推送到视图数据中。

        4
  •  1
  •   Ramin Bateni    7 年前

    我们可以通过 id 作为 Route Data QueryString 所以 支持他们两个 我建议这样做:

    var routeValues=Url.RequestContext.RouteData.Values;
    var paramName = "id";
    var id = routeValues.ContainsKey(paramName)?
             routeValues[paramName]:
             Request.QueryString[paramName];
    
        5
  •  1
  •   A.M. Patel    7 年前

    我想你可以直接在URL操作中使用 url.requestContext.routedata.values[“id”]

        6
  •  1
  •   pim    7 年前

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

    这样做使得访问这个值变得很简单,因为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>
    
        7
  •  -1
  •   Abou-Emish    11 年前

    我刚刚用过 <%= model.id %> 它工作