2009-04-15 10 views
6

लक्ष्य के बिना: पर www.mysite.com/NewYork या www.mysite.com/name-of-businessएएसपी MVC रीडायरेक्ट URL बदल रहा है (मार्ग)

निर्भर करता है: मैं URL टाइप करने में सक्षम होना चाहता हूँ स्ट्रिंग मैं यूआरएल को बदले बिना विभिन्न कार्यों के लिए मार्ग बनाना चाहता हूं।

अब तक मेरे पास है:

public static void RegisterRoutes(RouteCollection routes) 
{ 
    routes.MapRoute(
     "UrlRouter", // Route name 
     "{query}", // URL with parameters 
     new { controller = "Routing", action = "TestRouting" } // Parameter defaults 
    ); 
} 

नियंत्रक में मेरे पास है:

public ActionResult TestRouting(string query) 
{ 
    if (query == "NewYork") 
     return RedirectToAction("Index", "Availability"); // <--------- not sure 
    else if (query == "name-of-business") 
     return Redirect("nameofbusines.aspx?id=2731");  // <--------- not sure 
    else 
     return RedirectToAction("TestTabs", "Test");   // <--------- not sure 
} 

मैं बहुत ज्यादा सब कुछ रीडायरेक्ट करने के लिए/स्थानांतरण पृष्ठ पर बिना URL को बदलने की कोशिश की है, लेकिन सब कुछ मैंने यूआरएल में बदलाव करने की कोशिश की है या मुझे एक त्रुटि देता है।

मूल रूप से मैं Server.Transfer के बराबर है जहाँ मैं यूआरएल रखने पर कार्रवाई करने के लिए जानकारी भेजने के लिए और यह अपने परिणाम को प्रदर्शित हो सकता है के लिए देख रहा हूँ।

+0

मैं वास्तव में जो कुछ भी ढूंढ रहा था उसके साथ आने में सक्षम था। यह थोड़ा जटिल है लेकिन एक बार जब आप इसे स्थापित कर लेते हैं तो आप फ्लाई पर मार्गों को बहुत अधिक बना सकते हैं। मैं जल्द ही अपना उत्तर पोस्ट करूंगा, यह परियोजना किसी न किसी तरह है! – CesarHerrera

उत्तर

0

आप कह रहे हैं आप "www.mysite.com/NewYork" पर जाने के लिए तो "वास्तव में" "कहीं और" जाना लेकिन यूआरएल अकेला छोड़ दो चाहते हैं और? शायद आप क्या करना चाहते हैं तो इसे लागू करने के लिए आंशिक विचारों का उपयोग करें? इस तरह से, अपने आधार पेज क्या कराई हो जाता है किया जाएगा करने के लिए, और फिर उस पेज के अंदर आप अलग अलग आंशिक दृश्य को लाने के लिए अपनी हालत परीक्षण करते हैं? मैंने अपने आवेदन में एक ग्रिड या एक संपादन योग्य ग्रिड के केवल पढ़ने के संस्करण को देखने के लिए किया है। यह बहुत अच्छी तरह से काम किया।

+0

मैं क्या करना चाहता हूं www.mysite.com/NewYork और www.mysite.com/BusinessName अलग-अलग कार्रवाइयों पर जाने के लिए है। वह स्थान जो संचालन करता है और दूसरा जो व्यवसायों को संभालता है। लेकिन साथ ही यूआरएल बरकरार रखें। – CesarHerrera

5

मैं, इस पर निक के साथ कर रहा हूँ, हालांकि मुझे लगता है कि तुम सिर्फ बजाय partials क्या करने वाले का नियमित रूप से दृश्यों का उपयोग कर सकते हैं। आप अगर वे विचारों नियंत्रक के लिए इसी (क्योंकि यह केवल जुड़े और साझा दृश्य में दिखेगा) में नहीं हैं उन्हें साझा विचारों के रूप में लागू करने की आवश्यकता हो सकती है।

public ActionResult TestRouting(string query) 
{ 
    if (query == "NewYork") 
    { 
     var model = ...somehow get "New York" model 
     return View("Index", model); 
    } 
    else if (query == "name-of-business") 
    { 
     var model = ...get "nameofbusiness" model 
     return View("Details", model); 
    } 
    else 
    { 
     return View("TestTabs"); 
    } 
} 

प्रत्येक दृश्य तो मॉडल की एक विशेष उदाहरण लेते हैं और इसे मॉडल का उपयोग कर सामग्री है प्रस्तुत करना होगा। यूआरएल नहीं बदलेगा।

किसी भी समय है कि आप एक RedirectResult उपयोग करते हैं, आप वास्तव में एक HTTP ब्राउज़र को अनुप्रेषित भेज देंगे और किसी URL परिवर्तन के लिए बाध्य करेगा।

+0

मुझे लगता है कि मैं देख रहा हूं कि आप यहां क्या कह रहे हैं, मूल रूप से विचारों को साझा करते हैं और दृश्य वापस करते हैं और मॉडल के माध्यम से दृश्य जानकारी पास करते हैं। यह संभवतः करने योग्य है, लेकिन दुख की बात है कि मैं मॉडल का उपयोग नहीं करता और उपयोग नहीं करता, मैं व्यूडाटा के माध्यम से कुछ चीजें पास करता हूं। ऐसा लगता है कि अगर मैं कोई अन्य answe – CesarHerrera

+0

नहीं ढूंढ पा रहा हूं, तो मुझे रूटिंग का उपयोग करके उत्तर खोजने की उम्मीद थी इसलिए मैं केवल पैरामीटर के साथ क्रियाओं को कॉल कर सकता हूं ताकि वे काम कर सकें, लेकिन यह चुटकी पर काम कर सकता है। – CesarHerrera

+0

आह हाँ, साझा करने में और अधिक विचार नहीं करने का एक तरीका खोजने की भी उम्मीद कर रहा था, बस मौजूदा लोगों का उपयोग करें, यह सुनिश्चित न करें कि यह संभव है या नहीं। – CesarHerrera

0

मैं तुम्हें .aspx पृष्ठ पर रीडायरेक्ट के बारे में क्या कर सकते हैं यकीन नहीं है, लेकिन आप कुछ इस तरह के साथ RedirectToAction(...)s को बदलने के लिए सक्षम होना चाहिए: यदि आप इस की कोशिश की

public ActionResult TestRouting(string query) 
{ 
    if (query == "NewYork") 
    { 
     var controller = new AvailabilityController();   
     return controller.Index(); 
    } 
    else if (query == "name-of-business") 
     return Redirect("nameofbusines.aspx?id=2731");  <--------- not sure 
    else 
    { 
     var controller = new TestController();   
     return controller.TestTabs(); 
    } 

} 
+0

उत्तर के लिए धन्यवाद, लेकिन दुख की बात है: var नियंत्रक = नया टेस्टकंट्रोलर(); रिटर्न कंट्रोलर। टेस्टटाब्स(); या तो काम नहीं करता है, यह वास्तविक कार्रवाई को कॉल कर रहा है, लेकिन दृश्य परिणामों को वापस नहीं कर रहा है जो मैं प्रदर्शित करना चाहता हूं। मुझे आश्चर्य है कि दृश्य एचटीएमएल दिखाने के लिए मैं क्या कर सकता हूं – CesarHerrera

0

इम यकीन नहीं जिस तरह से या इस तरह से किसी भी कमियां हैं, तो ..

अपने प्रोजेक्ट में कोई Global.asax फ़ाइल जोड़ें। कि में निम्न विधि जोड़ें:।

void Application_BeginRequest(object sender, EventArgs e) 
{ 
    // Handles all incoming requests 
    string strURLrequested = Context.Request.Url.ToString(); 
    GetURLToRedirect objUrlToRedirect = new GetURLToRedirect(strURLrequested); 
    Context.RewritePath(objUrlToRedirect.RedirectURL); 
} 

GetURLToRedirect एक वर्ग तर्क URL टाइप के आधार पर वास्तविक URL को खोजने के लिए है कि हो सकता है [RedirectURL] संपत्ति URL के नीचे पर रीडायरेक्ट करने के साथ स्थापित किया जाएगा पत्रक।

आशा है कि मदद करता है ...

2

आप इस तरह अपने नियंत्रक को बदल सकते हैं:

public ActionResult TestRouting(string query) 
{ 
    string controller,action; 

    if (query == "NewYork") 
    { 
     controller = "Availability"; 
     action = "Index"; 
    } 
    else 
    { 
     controller = "Test"; 
     action = "TestTabs"; 
    } 

    ViewBag.controller = controller; 
    ViewBag.action = action; 

    return View(); 
} 

तो फिर तुम इस तरह अपने ध्यान में रखते हुए इन ViewBags उपयोग कर सकते हैं:

@{ 
    Layout = null; 
    Html.RenderAction(ViewBag.action, ViewBag.controller); 
} 

यह है कि। और आप इस उदाहरण को कक्षा और कुछ कार्यों के उपयोग में सुधार सकते हैं।

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