從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