在从/ Controller / Action / 1之类的URL返回的视图中(假设控制器/ action / id的默认路由),如何从视图中访问ID?
我不想在处理请求时将其添加到操作级别的ViewData字典中。
Answers:
我认为这是您要寻找的:
<%=Url.RequestContext.RouteData.Values["id"]%>
ViewData正是这样做的正确方法。
您的另一个选择是将包含ID的模型传递给视图。
编辑:在不完全知道您要做什么的情况下,很难给出更具体的建议。为什么需要ID,但不需要其他任何模型数据?您的控制器真的只将Id字段发送到视图吗?很难想象情况是什么。
如果ID值确实是传递给视图的唯一模型信息,则可以将ID本身用作模型。然后,您的操作方法的返回值为,View(id)
并且您无需使用ViewData。
ViewData["id"] = id;
只是有些事情不适合我。我猜这是我多次使用此模式的事实。一两次,我可能不会介意。谢谢。
将其添加到视图数据是正确的事情。至于如何添加它,您总是可以添加一个自定义ActionFilter
,该自定义将从路由字典中获取自定义并将其推送到viewdata中。
剃刀简单答案:
@Url.RequestContext.RouteData.Values["id"]
在ASP.NET Core中
@Url.ActionContext.RouteData.Values["id"]
只是我的两分钱,但我总是使用视图模型将任何数据传递到我的视图。即使int
像ID这样的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>