2013-12-16 4 views
7

का उपयोग नहीं करता है मैंने VirtualPathProvider स्थापित किया है और यह पता बार में http://.../home/index जैसे सीधे यूआरएल कॉल के लिए ठीक काम कर रहा है।एचटीएमएल सहायक कस्टम वर्चुअलपैथप्रोवाइडर

public class HomeController 
{ 
    public ActionResult Index() 
    { 
     // This triggers MyVirtualPathProvider functionallity when called via 
     // the browsers address bar or anchor tag click for that matter. 
     // But it does not trigger MyVirtualPathProvider for 'in-view' calls like 
     // @{ Html.RenderAction("index", "home"); } 
     return View(); 
    } 
} 

public class MyVirtualPathProvider : VirtualPathProvider 
{ 

    public override System.Web.Hosting.VirtualFile GetFile(string virtualPath) 
    { 
     // This method gets hit after the Controller call for return View(...); 
     if (MyCondition) 
      return MyVirtualFileHandler.Get(virtualPath); 
     return base.GetFile(virtualPath); 
    } 

    public override bool FileExists(string virtualPath) 
    { 
     // This method gets hit after the Controller call for return View(...); 
     if (MyCondition) 
      return true; 
     return base.FileExists(virtualPath); 
    } 

} 

हालांकि, मैं एचटीएमएल सहायक के लिए भी काम करने के लिए इस चाहते हैं, लेकिन अभी यह ध्यान में रखते हुए एचटीएमएल सहायक कॉल के लिए VirtualPathProvider अनदेखी कर रहा है:

@{ 
    Html.RenderAction("index", "home"); 
} 

वहाँ करने के लिए एक रास्ता है इस समस्या का समाधान निकले?

जोड़ में मेरे पास वेबव्यूपेज के लिए ओवरराइड है, इसलिए मैं मददगारों के लिए प्रारंभिकता को ओवरराइड करने में सक्षम हूं, लेकिन मुझे कोई संकेत नहीं मिला है कि कैसे या कैसे।

संपादित करें:

मैं दो कंप्यूटर पर इस की कोशिश की है और, अजीब तरह से पर्याप्त है, यह किसी अन्य कंप्यूटर पर काम करता है। तो सवाल वास्तव में बन जाएगा:

वर्चुअलपाथप्रोवाइडर एक पर क्यों काम करता है और किसी अन्य कंप्यूटर पर 50% विफल रहता है? लेकिन फिर यह सवाल अस्पष्ट, सट्टा भी कुछ हद तक बन जाएगा। फिर भी मैं इससे खुश नहीं हूं लेकिन ऐसा लगता है कि मुझे कुछ चीजों को पुनर्स्थापित करना होगा। :(

+1

आपका क्या मतलब है? बच्चे का दृश्य मेरे परीक्षण में कस्टम 'वर्चुअलपाथप्रोवाइडर' पर जाता है। यहां मेरी [टेस्ट प्रोजेक्ट] (https://dl.dropboxusercontent.com/u/14576915/VirtualPath है। ज़िप)। यदि आप वीएस में आउटपुट टैब देखते हैं, तो आपको पहले अनुरोध – LostInComputer

+0

@LostInComputer पर लॉग इन होने पर 'GetFile/Views/Home/Child.cshtml' देखना चाहिए आपकी परियोजना वास्तव में काम करती है, मैं यह निर्धारित करने जा रहा हूं कि मेरी परियोजनाएं उपयोग करती हैं या नहीं विभिन्न असेंबली। यह एक पैकेज अंतर भी हो सकता है। अन्यथा मेरी परियोजना को गड़बड़ कर दिया जा सकता है। मेरे साथ यह एचटीएमएल के लिए काम नहीं करता है। रेंडरएक्शन। मैं इसे देख लूंगा। आपके उदाहरण प्रोजेक्ट के लिए धन्यवाद। – Silvermind

+0

शायद फाइल पहले से ही हो चुकी है कैश किया गया है इसलिए 'GetFile' और' FileExist' को उस फ़ाइल के लिए नहीं कहा जाता है – LostInComputer

उत्तर

4

उपयोगकर्ता LostInComputer एक नमूना परियोजना जो मेरे नोटबुक पर काम किया सौंपने के लिए तरह पर्याप्त था और मैं क्या अंतर हो जाएगा के बारे में उलझन में था।

आम तौर पर एक वास्तव में उम्मीद करेंगे कि एचटीएमएल सहायकों होगा सिर्फ काम VirtualPathProvider के लिए, और अब मुझे पता है कि यह चाहिए।

वास्तविक समस्या उस विशेष पीसी की स्थापना के भीतर है जहां मुझे समस्या का सामना करना पड़ा और पुन: स्थापित करने के बाद सब ठीक काम किया। तो यह वास्तव में एक परिष्कृत समाधान नहीं है , लेकिन चूंकि इस सवाल पर थोड़ा ध्यान नहीं दिया गया है कम से कम इसे अपना जवाब दे रहा है, क्योंकि यह कुछ दिनों के लिए उपयोगी सामान हो सकता है, यह कितना सुस्त हो सकता है। :)

जब आप निश्चित रूप से कुछ काम करने की उम्मीद करेंगे, तो आप हमेशा इसे एक अलग मशीन पर चलाने की कोशिश कर सकते हैं (यदि आपके पास पाठ्यक्रम उपलब्ध है), क्योंकि अंत में यह सब गलत हो सकता है भ्रष्ट स्थापना। :(

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