2014-08-27 10 views
6

पर रूटिंग मैं एमवीसी के लिए नौसिखिया हूँ। मैं अपने मौजूदा वेब फॉर्म विजुअल स्टूडियो 2012 अपडेट 4 प्रोजेक्ट में एमवीसी 5.2 को एकीकृत कर सकता हूं। मैंने अपना पहला नियंत्रक बनाया और सभी उम्मीद के अनुसार काम किया। एमवीसी व्यू तक पहुंचने पर भी मैं अपने मौजूदा प्रोजेक्ट से विंडोज़ फॉर्म प्रमाणीकरण का लाभ उठाने में सक्षम था। लेकिन जब मेरा दूसरा नियंत्रक बनाया गया तो यह गड़बड़ हो गया। मैं दो नियंत्रकों दोनों ~/नियंत्रकों में स्थित हैएएसपी.NET एमवीसी @ Url.Action() गलत नियंत्रक

public static class RouteConfig 
{ 
    public static void RegisterRoutes(RouteCollection routes) 
    { 
     routes.EnableFriendlyUrls(); 

     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

     routes.MapRoute(
      name: "Default", 
      url: "{controller}/{action}/{id}", 
      defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
     ); 
    } 
} 

:

यह मेरा मार्ग मानचित्रण है। मेरी पहली नियंत्रक है:

public class HomeController : Controller 
{ 
    // 
    // GET: /Home/ 
    public ActionResult Index() 
    { 
     //return View(); 
     return Redirect("~/Default.aspx"); 
    } 

    public ActionResult CloseSession() 
    { 
     return Redirect("http://www.yahoo.com"); 
    } 
} 

दूसरी नियंत्रक:

public class CajaWebController : Controller 
{ 
    // 
    // GET: /CajaWeb/ 
    public ActionResult Index() 
    { 
     return View(); 
    } 

    public ActionResult CloseSession() 
    { 
     return Redirect("http://www.cnn.com"); 
    } 
} 

मैं नहीं जानता कि यह समस्या के लिए प्रासंगिक है, लेकिन मैं शामिल करेंगे कैसे MVC दृश्य पहुँच जाता है। मेरा वीएस2012 शुरू यूआरएल

http://localhost/Fortia/CajaWeb. 

फोर्टिया मेरा ऐप नाम है। क्योंकि मैं वेब प्रपत्र प्रमाणीकरण और

<location path="CajaWeb"> 
    <system.web> 
    <authorization> 
     <allow roles="Fortia" /> 
     <deny users="*" /> 
    </authorization> 
    </system.web> 
</location> 

जब पुराने WebForms एप्लिकेशन को प्रमाणीकरण तंत्र डिबग करने के लिए शुरू करने को कहा जाता है की घोषणा की, वर्ष WebForms के लिए लॉग इन लागू पेज और एक सफल प्रवेश के अंत में मेरी CajaWebController, इंडेक्स() के बाद कार्रवाई कहा जाता है।

<a href='@Url.Action("CloseSession", "CajaWeb")'>Close session</a> 

: CajaWebController बनाने यह HomeController जो बुलाया गया था था, लेकिन मुझे लगता है MVC अब सही नियंत्रक deduces से पहले लक्षित यूआरएल जा रहा है

http://localhost/Fortia/CajaWeb. 

लागू देखे जाने के बाद कोड है उसका क्योंकि CajaWeb है समस्या तब होती है जब जेनरेट लिंक पर क्लिक करके एमवीसी होम कंट्रोलर.इंडेक्स() क्रिया को कॉल करता है, बशर्ते मैं स्पष्ट रूप से @ url.Action में CajaWebController.CloseSession() को सेट करता हूं ...

मैंने जेनरेट किए गए लिंक को देखा और यह गलत लगता है:

<a href='/Fortia/__FriendlyUrls_SwitchView?action=CloseSession&amp;controller=CajaWeb'> 

यह & में पैरामीटर विभाजक & इनकोडिंग लेकिन वैसे भी मैं

http://localhost/Fortia/__FriendlyUrls_SwitchView?action=CloseSession&controller=CajaWeb 

के रूप में href handcoding कोशिश की, लेकिन परिणाम एक ही था।

क्या गलत है?

+1

[एमवीसी में प्राधिकरण के लिए पथ लॉक करने के लिए web.config का उपयोग न करें, यह संभवतः काम नहीं करेगा, और निश्चित रूप से सुरक्षा छेद की अनुमति देगा] (http://stackoverflow.com/questions/11765030/how-to-lock -डाउन-पथ-इन-एएसपी-नेट-एमवीसी) –

+0

फोरम साइट्स के विपरीत, हम "धन्यवाद" या "किसी भी मदद की सराहना नहीं करते हैं", या हस्ताक्षर [so] का उपयोग नहीं करते हैं। देखें "[चाहिए 'हाय', 'धन्यवाद,' टैगलाइन, और नमस्कार पदों से हटा दिए जाएंगे?] (Http://meta.stackexchange.com/questions/2950/should-hi-thanks-taglines-and-salutations-be -प्रमुख-से-पोस्ट) –

+0

शायद पैकेज [एएसपी.नेट फ्रेंडली यूआरएल] (http://aspnetfriendlyurls.codeplex.com/) आप वेबफॉर्म के लिए उपयोग करने के लिए प्रतीत होता है एमवीसी के साथ अच्छी तरह से नहीं खेलता है? – CodeCaster

उत्तर

0

ऐसा लगता है कि आप उपयोग कर रहे हैं ASP.NET Friendly Urls package यूआरएल उत्पन्न कर रहे यूआरएल के साथ हस्तक्षेप कर रहा है।The library seems to be meant for WebForms anyway

यदि यह बिना काम करता है, तो इसे छोड़ दें क्योंकि एमवीसी के यूआरएल पहले ही काफी एसईओ-अनुकूल हैं क्योंकि नियंत्रक और एक्शन नाम उनकी सामग्री के लिए सार्थक हैं।

+0

मैं फ्रेंडली यूआरएल पैकेज को अनइंस्टॉल नहीं कर सकता क्योंकि ऐप जिसे मैं अपडेट कर रहा हूं वह वेबफॉर्म है और इस पैकेज पर भारी निर्भर है। मैं बस एमवीसी समर्थन जोड़ने की कोशिश कर रहा हूं। तो मैं देखूँगा कि इसके साथ कैसे रहना है। लेकिन यह एक और सवाल होगा – sammybar

0

मुझे लगता है कि समस्या यह है कि मार्ग

http://localhost/Fortia/CajaWeb

किसी भी मार्गों तो यह RouteConfig में निर्दिष्ट डिफ़ॉल्ट मार्ग के लिए जा रहा समाप्त होता है से मेल नहीं खाता है। आपको "फोर्टिया" नामक अपने ऐप में एक रूट कॉन्फ़िगर करने या क्षेत्र बनाने की आवश्यकता है।

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