2009-06-11 150 views
74

從URL返回的視圖中,例如/ Controller/Action/1(假設controller/action/id的默認路由),我如何才能從視圖中訪問ID?如何從URL(ASP.NET MVC)中獲取視圖中的當前路由ID

我不想在處理請求時將它添加到操作級別的ViewData字典中。

+2

爲什麼你不希望將其添加到ViewData字典?這就是你正在描述的機制。 – 2009-06-11 06:24:41

回答

167

我認爲這是你在找什麼:

<%=Url.RequestContext.RouteData.Values["id"]%> 
13

ViewData正是這樣做的正確方法。

您的其他選項是將包含ID的模型傳遞給視圖。

編輯:不知道你要綁定什麼,很難給出更具體的建議。爲什麼你需要一個ID,但沒有任何其他模型數據?你的控制器真的只是發送Id字段到視圖?很難想象這種情況是什麼。

如果ID值是真正傳遞給視圖的唯一模型信息,那麼您可以使用ID本身作爲模型。那麼你的動作方法的返回值是View(id),你不需要使用ViewData。

+0

不幸的是,該視圖沒有模型。 關於`ViewData [「id」] = id;`只是不坐在我身邊。我猜這就是我正在使用這種模式的事實。一次或兩次,我可能不介意。 謝謝。 – JMS 2009-06-11 06:30:35

3

將它添加到viewdata是正確的。至於如何添加它,你總是可以添加一個自定義ActionFilter,它從路由字典中抓取它並將其推入viewdata。

+0

我喜歡這個想法,用適當的空值檢查你會把它放在你的控制器的頂部,你應該能夠總是依靠它在那裏,當它應該是。 – 2009-06-11 17:33:42

+0

或者只是做一個很好的小ViewDataWrapper類,可以管理「如果這是null」做的東西的東西。 。 。 – 2009-06-11 17:46:07

+0

真棒的想法,謝謝! – JMS 2009-06-14 01:10:29

-1

我只是用<%= model.id %>和它的作品

1

我們可以通過idRoute DataQueryString,所以要的既支持他們我推薦這種方式:

var routeValues=Url.RequestContext.RouteData.Values; 
var paramName = "id"; 
var id = routeValues.ContainsKey(paramName)? 
     routeValues[paramName]: 
     Request.QueryString[paramName]; 
1

我覺得你可以在URL操作直接使用 Url.RequestContext.RouteData.Values [「身份證」]

0

只是我的兩分錢,但我總是用視圖模型對於任何數據傳遞給我的看法。即使它只需要像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>