URL (ASP.NET MVC)에서보기 내 현재 경로 ID를 얻는 방법


78

/ Controller / Action / 1 (controller / action / id의 기본 경로 가정)과 같은 URL에서 반환 된보기 내에서보기 내에서 ID에 액세스하려면 어떻게해야합니까?

요청을 처리 할 때 작업 수준에서 ViewData 사전에 추가 할 필요가 없습니다.


2
ViewData 사전에 추가하지 않는 이유는 무엇입니까? 이것이 바로 당신이 설명하는 것에 대해 제공되는 메커니즘입니다.
Adam Ralph

답변:


181

나는 이것이 당신이 찾고있는 것이라고 생각합니다.

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

+1 간단하고 효과적이며 정확히 질문이 요구 한 것입니다!
Losbear

웹의 다른 곳에서이 문서가 제대로 문서화되지 않은 이유는 무엇입니까? grrrr
Ayyash

이 답변은 Reflected XSS를 완화하는 방법을 적절하게 설명하지 않습니다. 비추천.
CervEd

16

ViewData는 정확히이 작업을 수행하는 올바른 방법입니다.

다른 옵션은 ID가 포함 된 모델을 뷰에 전달하는 것입니다.

편집 : 당신이 무엇을하려고하는지 정확히 알지 못하면 더 구체적인 조언을 제공하기가 어렵습니다. ID는 필요하지만 다른 모델 데이터는 필요하지 않은 이유는 무엇입니까? 컨트롤러가 실제로 Id 필드를 뷰로 전송하고 있습니까? 시나리오가 무엇인지 상상하기 어렵습니다.

ID 값이 실제로 뷰에 전달되는 유일한 모델 정보 인 경우 ID 자체를 모델로 사용할 수 있습니다. 그러면 작업 메서드의 반환 값은 다음 View(id)과 같을 것이며 ViewData를 사용할 필요가 없습니다.


불행히도 뷰에는 모델이 없습니다. 뭔가 나에게 ViewData["id"] = id;딱 맞지 않습니다. 이 패턴을 꽤 많이 사용하고있는 것이 사실이라고 생각합니다. 한두 번은 아마 괜찮을 것입니다. 감사.
JMS

3

뷰 데이터에 추가하는 것은 올바른 일입니다. 추가하는 방법에 관해서는 항상 ActionFilter경로 사전에서 가져 와서 뷰 데이터로 푸시 하는 사용자 지정 을 추가 할 수 있습니다 .


나는 그 아이디어를 좋아합니다. 적절한 null 값 검사를 사용하면 컨트롤러 맨 위에 놓으면 항상 있어야 할 때 거기에있을 수 있습니다.
Blair Scott

또는 "이것이 null 인 경우 수행 할 작업"을 관리 할 수있는 멋진 ViewDataWrapper 클래스를 만드십시오. . .
Wyatt Barnett

2

우리는 전달할 수 idRoute Data또는QueryString 그렇게하기 위해, 둘 다 지원 내가이 방법을 권장합니다 :

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

2

URL 작업 Url.RequestContext.RouteData.Values ​​[ "id"]에서 직접 사용할 수 있다고 생각합니다.


1
이것은 나를 위해 일했습니다. ASP.NET Core에서는 다른 사람이 찾는 경우를 대비하여 Url.ActionContext.RouteData.Values ​​[ "id"]입니다.
Andy

2

.NET Core를 사용하는 경우

이 코드 사용

Url.ActionContext.RouteData.Values["id"]

2

Razor의 간단한 답변 :

@Url.RequestContext.RouteData.Values["id"]

ASP.NET Core에서

@Url.ActionContext.RouteData.Values["id"]

1

2 센트 밖에 안되지만 데이터를 뷰에 전달하기 위해 항상 뷰 모델을 사용합니다. int이드와 같은 것을 필요로하는 것처럼 간단하더라도 .

이렇게하면 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>
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.