MVC Razor 마크 업에서 쿼리 문자열 매개 변수를 가져 오는 방법은 무엇입니까?


81

Razor 마크 업에서 URL 매개 변수를 확인하고 싶습니다. 예를 들어, 다음과 같이 어떻게합니까?

<div id="wrap" class="@{if (URL "IFRAME" PARAMETER EQUALS 1) iframe-page}">

답변:


124

비슷한 스레드

<div id="wrap" class=' @(ViewContext.RouteData.Values["iframe"] == 1 ? /*do sth*/ : /*do sth else*/')> </div>

2014 년 1 월 10 일 수정 : 이 질문이 인기가 많기 때문에이 답변이 개선되었습니다.

위의 예는에서만 값을 가져 RouteData오므로 일부 등록 된 경로에서 포착 한 쿼리 문자열에서만 가져옵니다. 쿼리 문자열 값을 얻으려면 현재 HttpRequest. 가장 빠른 방법은 (TruMan이 지적했듯이)`Request.Querystring '을 호출하는 것이므로 대답은 다음과 같아야합니다.

<div id="wrap" class=' @(Request.QueryString["iframe"] == 1 ? /*do sth*/ : /*do sth else*/')> </div>

RouteValues와 QueryString MVC를 확인할 수도 있습니다 .

03-05-2019 편집 : 위의 솔루션은 .NET Framework에서 작동합니다 .
다른 사람들이 지적했듯이 .NET Core 에서 쿼리 문자열 값을 얻으려면 경로 Query에서 개체 를 사용해야 합니다 Context.Request. 따라서 다음과 같습니다.

<div id="wrap" class=' @(Context.Request.Query["iframe"] == new StringValues("1") ? /*do sth*/ : /*do sth else*/')> </div>

pure 대신 struct를 반환 StringValues("1")하기 때문에 문에서 사용 하고 있습니다. 그것이 내가 찾은이 scenerio의 방법을 정리합니다.QueryStringValuesstring


7
힌트 주셔서 감사합니다. 이 작업은 다음과 같습니다. <div id = "wrap"class = "@ (Request.QueryString ["iframe "] =="1 "?"iframe ": string.Empty)">
TruMan1

1
나는 당신의 대답에 @ TruMan1의 코멘트를 추가 할 것입니다. 제 경우에는 값이 경로 데이터 (nop-commerce 사용)에 없었지만 요청을 통해 액세스 할 수있었습니다.
Ian

명확히하기 위해 - 당신이 예를 들어 Request.QueryString을을 사용하려는 뷰가 리디렉션의 결과로 표시되는 경우
크리스 Halcrow을

1
당신은 함께 그 시작을 추가 할 수 있습니다 2.1 .NET 핵심 변경할 필요 ContextHttpContext
이반 가르시아 Topete

36

.net core 2.0을 사용하는 경우 다음과 같습니다.

Context.Request.Query["id"]

샘플 사용법 :

<a href="@Url.Action("Query",new {parm1=Context.Request.Query["queryparm1"]})">GO</a>

3
그러면 '컨텍스트 이름이 현재 컨텍스트에 존재하지 않습니다'가 표시됩니다. 하지만 Request.Query [ "queryparm1"] 만 사용하면됩니다.
x5657

1
@ x5657 정말 저에게 효과가 있었던 유일한 솔루션 이었기 때문에 답변으로 댓글을 게시해야합니다!
Jpsy

11

다른 답변이 '현재 컨텍스트에 이름이 존재하지 않습니다.'와 같은 오류가 발생하기 때문에 이것을 답변으로 게시하는 것이 좋습니다.

다음 작품을 사용하십시오.

Request.Query["queryparm1"]

샘플 사용법 :

<a href="@Url.Action("Query",new {parm1=Request.Query["queryparm1"]})">GO</a>

2
그것은 나를 위해 일을하지 않았다 그러나 이것은했다 : Request.QueryString을
TroySteven

8

어떤 답변도 저에게 효과가 없었습니다. " 'HttpRequestBase'에 'Query'에 대한 정의가 포함되어 있지 않습니다."라는 메시지가 표시되었지만이 방법은 작동했습니다.

HttpContext.Current.Request.QueryString["index"]

5

더 우아한 해결책은 컨트롤러와 ViewData 사전을 사용하는 것입니다.

//Controller:
public ActionResult Action(int IFRAME)
    {
        ViewData["IsIframe"] = IFRAME == 1;
        return View();
    }

//view
@{
    string classToUse = (bool)ViewData["IsIframe"] ? "iframe-page" : "";
   <div id="wrap" class='@classToUse'></div>
 }

3
이보기는 여러 컨트롤러에서 공유됩니다. Razor 마크 업에 논리를 직접 넣는 대신 이렇게하면 지저분해질 것이라고 생각합니다. 또한 부분보기에서도이 작업을 수행해야 할 수 있습니다.
TruMan1

보다 우아한 해결책은 ViewModel의 일부로 반환하는 것입니다 return View(new SomeViewModel{ IsIFrame = IFrame });
Jose Capistrano

1

Asp.net Core 2 용

ViewContext.ModelState["id"].AttemptedValue

나는 단지 그것을 추가 할 것입니다 AttempValue– 만약 paramter가 쿼리 문자열에 존재하지 않는다면 예외를 얻게 될 것이므로 먼저 확인해야합니다 :@if (ViewContext.ModelState["id"] != null)...
adinas
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.