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 핵심 변경할 필요 Context에HttpContext
— 이반 가르시아 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.