MVC रेजर मार्कअप से क्वेरी स्ट्रिंग पैरामीटर कैसे प्राप्त करें?


81

मैं अपने रेजर मार्कअप में 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>

EDIT 01-10-2014: चूंकि यह प्रश्न इतना लोकप्रिय है इसलिए इस उत्तर में सुधार किया गया है।

ऊपर दिए गए उदाहरण से केवल मान प्राप्त किए जाएंगे RouteData, इसलिए केवल उन क्वेरस्टार्स से जो कुछ पंजीकृत मार्ग से पकड़े जाते हैं। वर्तमान में प्राप्त करने के लिए आपको क्वेरिस्ट्रिंग मान प्राप्त करना है HttpRequest। सबसे तेज़ तरीका कॉल करके है (जैसा कि TruMan ने बताया) `Request.Querystring 'तो उत्तर होना चाहिए:

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

आप रूटवील्यूज़ बनाम क्वेरीस्ट्रिंग एमवीसी की भी जांच कर सकते हैं ?

EDIT 03-05-2019: उपरोक्त समाधान .NET फ्रेमवर्क के लिए काम कर रहा है
जैसा कि दूसरों ने बताया कि यदि आप .NET कोर में क्वेरी स्ट्रिंग मान प्राप्त करना चाहते हैं, तो आपको पथ Queryसे ऑब्जेक्ट का उपयोग करना होगा Context.Request। तो यह होगा:

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

कृपया ध्यान दें कि मैं StringValues("1")बयान में उपयोग कर रहा हूं क्योंकि शुद्ध के बजाय Queryरिटर्न देता है । यह इस scenerio जो मैंने पाया है के लिए रास्ता साफ है।StringValuesstring


7
संकेत के लिए धन्यवाद। इसने काम किया: <div id = "wra" class = "@ (Request.QueryString [" iframe "] =" "1"? "Iframe": string.Empty) ">
TruMan1

1
मैं आपके जवाब में @ TruMan1 की टिप्पणी जोड़ूंगा। मेरे मामले में मान रूट डेटा (एनओपी-कॉमर्स का उपयोग करके) में नहीं थे, लेकिन अनुरोध के माध्यम से सुलभ थे।
इयान

स्पष्ट करने के लिए - आप उदाहरण के लिए Request.QueryString का उपयोग करते हैं दृश्य एक रीडायरेक्ट का एक परिणाम के रूप में प्रदर्शित किया जा रहा है
क्रिस Halcrow

1
आप उस शुरुआत को .NET Core 2.1 के साथ जोड़ना चाह सकते हैं, जिसे आपको बदलने की आवश्यकता ContextहैHttpContext
इवान गार्सिया टोपेटे सेप

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 आपको अपनी टिप्पणी एक उत्तर के रूप में पोस्ट करनी चाहिए, क्योंकि यह एकमात्र समाधान था जो वास्तव में मेरे लिए काम करता था!
जेपी

11

इसे उत्तर के रूप में पोस्ट करने का सुझाव दिया गया था, क्योंकि कुछ अन्य उत्तर 'वर्तमान संदर्भ में संदर्भ का नाम मौजूद नहीं है' जैसी त्रुटियां दे रहे हैं।

बस निम्नलिखित कार्यों का उपयोग कर:

Request.Query["queryparm1"]

नमूना उपयोग:

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

2
यह मेरे लिए काम नहीं किया, लेकिन यह किया: Request.QueryString
ट्रॉयसेवन

8

मेरे लिए काम किए गए उत्तरों में से कुछ भी नहीं, मुझे "HttpRequestBase" मिल रहा था जिसमें 'क्वेरी' की कोई परिभाषा नहीं है, लेकिन इसने काम किया:

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
यह दृश्य कई नियंत्रकों में साझा किया गया है। मुझे लगता है कि यह सीधे रेजर मार्कअप में तर्क रखने के बजाय इसे इस तरह से गड़बड़ कर देगा। मुझे यह भी अनुमान है कि मुझे आंशिक विचारों में भी ऐसा करना पड़ सकता है।
TruMan1

एक और अधिक सुंदर समाधान यह है कि इसे एक ViewModel के भाग के रूप में लौटाया जाए return View(new SomeViewModel{ IsIFrame = IFrame });
जोस कैपिस्ट्रानो

1

Asp.net Core 2 के लिए

ViewContext.ModelState["id"].AttemptedValue

मैं सिर्फ इतना जोड़ता हूं कि हालांकि यह कहता है AttempValue- अगर पैरामीटर क्वेरी स्ट्रिंग में मौजूद नहीं है, तो आपको एक अपवाद मिलेगा, इसलिए आपको पहले जांच करनी चाहिए:@if (ViewContext.ModelState["id"] != null)...
adinas
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.