2012-06-27 11 views
7

यदि कोई उपयोगकर्ता होम पेज से लॉग इन करता है तो मुझे एक विशेष कार्रवाई करने की आवश्यकता होती है। मेरी LogOnModel में, मैं एक छिपी हुई फ़ील्ड है:.NET MVC में, क्या यह जांचने का एक आसान तरीका है कि मैं होम पेज पर हूं या नहीं?

@Html.Hidden("returnUrl", Request.Url.AbsoluteUri) 

मेरी नियंत्रक में, मैं अगर है कि मूल्य होम पेज या नहीं की जाँच करने की जरूरत है। नीचे दिए गए उदाहरण में, मैं यह देखने के लिए जांच कर रहा हूं कि उपयोगकर्ता किसी विशेष पृष्ठ पर है ("खाता/रीसेट पासवर्ड")। क्या यह देखने का कोई तरीका है कि वे नियमित रूप से अभिव्यक्तियों का उपयोग किए बिना होम पेज पर हैं या नहीं?

[HttpPost] 
    public ActionResult LogOnInt(LogOnModel model) 
    { 
     if (model.returnUrl.Contains("/Account/ResetPassword")) 
     { 
      return Json(new { redirectToUrl = @Url.Action("Index","Home")}); 
     } 

कोई भी विचार? बहुत - बहुत धन्यवाद!

उत्तर

7

इस पर पहुंचने का एक तरीका RouteData में विशिष्ट नियंत्रक को देखना होगा। यह मानते हुए कि होम पेज के लिए आप जिस नियंत्रक का उपयोग कर रहे हैं उसे "होमकंट्रोलर" कहा जाता है, तो अनुरोध के लिए RouteData कुंजी "नियंत्रक" के लिए मान "होम" होगा।

वह कुछ इस तरह दिखेगा:

बजाय

(या यदि आप इसके लिए अन्य कारणों के लिए अतिरिक्त):

@Html.Hidden("returnUrl", Request.Url.AbsoluteUri) 

आप होगा:

@Html.Hidden("referrer", Request.RequestContext.RouteData.Values['Controller']) 

और आपका नियंत्रक इस तरह दिखेगा:

[HttpPost] 
public ActionResult LogOnInt(LogOnModel model) 
{ 
    if (model.referrer = "Home") 
    { 
     return Json(new { redirectToUrl = @Url.Action("Index","Home")}); 
    } 
} 

इस का उपयोग करते हुए .Contains()

अद्यतन की आवश्यकता को समाप्त होगा:

तुम भी एक छिपी हुई फ़ील्ड की आवश्यकता को समाप्त कर सकता है (और इस तरह क्या हर पृष्ठ में की तरह प्रतीत होता है के लिए समग्र पेज-वजन कम आपका आवेदन) रेफरर यूआरएल (Request.UrlReferrer.AbsoluteUri) को रूट पर मैप करके। इसके बारे में यहां एक पोस्ट है।

How to get RouteData by URL?

विचार LogOnInt विधि में एक MVC रूट करने के लिए एक संदर्भ URL मैप करने के लिए MVC इंजन का उपयोग करने, कोड पूरी तरह से आत्म निहित होना करने की अनुमति होगी।

यह शायद सर्वर पर वापस धक्का देने के लिए स्क्रिप्टिंग के साथ देखने के लिए दुनिया के लिए नियंत्रक का नाम और कार्रवाई नाम डालने से क्लीनर होगा।

+0

धन्यवाद! मैं उसे एक शॉट देने जा रहा हूँ। मुझे लगता है कि जब मैं मुख्य पृष्ठ (होम/इंडेक्स) पर हूं तो यह मुझे वह मूल्य देगा, हालांकि वास्तविक उपयोगकर्ता यूआरएल इसे प्रदर्शित नहीं करता है? –

+0

नियंत्रक नाम आप इस तरह RouteData वस्तु पर मान संपत्ति का उपयोग करना होगा प्राप्त करने के लिए: Request.RequestContext.RouteData.Values ​​[ "नियंत्रक"] उनका कहना है कि बाहर के लिए – Rafe

+0

@Rafe धन्यवाद, मैं पता ही नहीं चलता था कि गलती। – parKing

0

आप

Request.Url.AbsoluteUri 

तो बस पेज नाम के लिए स्ट्रिंग की जाँच इस्तेमाल कर सकते हैं।

सबसे अच्छा तरीका नहीं हो सकता है, लेकिन यह एक त्वरित और आसान तरीका है।

How to get current page URL in MVC 3

वहाँ भी है एक और जवाब आप के लिए उपयोगी हो सकता है:

मैं इस पेज से उस विधि मिला है।

+0

धन्यवाद गाज़- बहुत अनुचित। यह वर्तमान दृष्टिकोण है जिसका मैं उपयोग कर रहा हूं। –

3

आप के माध्यम से

string controller = (string)ViewContext.RouteData.Values["controller"]; 
string action = (string)ViewContext.RouteData.Values["action"]; 
string url = Url.Action(action, controller); 

वर्तमान URL प्राप्त आप एक HtmlHelper में या नियंत्रक लॉगिन दृश्य रेंडर कर में यह कर सकते हैं कर सकते हैं।

एक छिपी हुई फ़ील्ड तुमने किया था के रूप में अपने पद कार्रवाई में तो, में स्टोर url:

[HttpPost] 
public ActionResult LogOnInt(LogOnModel model) 
{ 
    // Create your home URL 
    string homeUrl = Url.Action("Index", "Home"); 
    if (model.referrer == homeUrl) 
    { 
     return Json(new { redirectToUrl = @Url.Action("Index","Home")}); 
    } 
} 

Url.Action उपयोग करने का लाभ यह है कि यह अपने मार्ग तालिका का उपयोग यूआरएल उत्पन्न करने के लिए, यदि आपका मार्गों कभी अर्थ जाएगा बदलें, आपको यह कोड बदलना नहीं होगा।

+0

बादलॉगऑनटैब Omar- धन्यवाद होता है के माध्यम से: –

5

किसी भी दृश्य में, निम्न कोड वर्तमान नियंत्रक नाम देता है।

@ViewContext.Controller.ValueProvider.GetValue("controller").RawValue.ToString() 

क्या यह काफी आसान है? :)

+1

@ Tohid- ​​धन्यवाद एक लाख, मुझे लगता है कि हो सकता है मैं क्या देख रहा था। साथ ही, मुझे लगता है कि मैं एक मूल्य के रूप में "कार्रवाई" भी निर्दिष्ट कर सकता हूं। –

संबंधित मुद्दे

 संबंधित मुद्दे