从URL返回的视图中,例如/ Controller/Action/1(假设controller/action/id的默认路由),我如何才能从视图中访问ID?如何从URL(ASP.NET MVC)中获取视图中的当前路由ID
我不想在处理请求时将它添加到操作级别的ViewData字典中。
从URL返回的视图中,例如/ Controller/Action/1(假设controller/action/id的默认路由),我如何才能从视图中访问ID?如何从URL(ASP.NET MVC)中获取视图中的当前路由ID
我不想在处理请求时将它添加到操作级别的ViewData字典中。
我认为这是你在找什么:
<%=Url.RequestContext.RouteData.Values["id"]%>
ViewData正是这样做的正确方法。
您的其他选项是将包含ID的模型传递给视图。
编辑:不知道你要绑定什么,很难给出更具体的建议。为什么你需要一个ID,但没有任何其他模型数据?你的控制器真的只是发送Id字段到视图?很难想象这种情况是什么。
如果ID值是真正传递给视图的唯一模型信息,那么您可以使用ID本身作为模型。那么你的动作方法的返回值是View(id)
,你不需要使用ViewData。
不幸的是,该视图没有模型。 关于`ViewData [“id”] = id;`只是不坐在我身边。我猜这就是我正在使用这种模式的事实。一次或两次,我可能不介意。 谢谢。 – JMS 2009-06-11 06:30:35
将它添加到viewdata是正确的。至于如何添加它,你总是可以添加一个自定义ActionFilter
,它从路由字典中抓取它并将其推入viewdata。
我喜欢这个想法,用适当的空值检查你会把它放在你的控制器的顶部,你应该能够总是依靠它在那里,当它应该是。 – 2009-06-11 17:33:42
或者只是做一个很好的小ViewDataWrapper类,可以管理“如果这是null”做的东西的东西。 。 。 – 2009-06-11 17:46:07
真棒的想法,谢谢! – JMS 2009-06-14 01:10:29
我只是用<%= model.id %>
和它的作品
我们可以通过id
为Route Data
或QueryString
,所以要的既支持他们我推荐这种方式:
var routeValues=Url.RequestContext.RouteData.Values;
var paramName = "id";
var id = routeValues.ContainsKey(paramName)?
routeValues[paramName]:
Request.QueryString[paramName];
我觉得你可以在URL操作直接使用 Url.RequestContext.RouteData.Values [“身份证”]
只是我的两分钱,但我总是用视图模型对于任何数据传递给我的看法。即使它只需要像ID一样的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>
为什么你不希望将其添加到ViewData字典?这就是你正在描述的机制。 – 2009-06-11 06:24:41