मैं कस्टम VirtualFile और VirtualPathProvider कार्यान्वयन कि सफलतापूर्वक एम्बेडेड संसाधन है कि कर रहे हैं आंशिक दृश्य प्राप्त कर रहे हैं लिखा कस्टम VirtualPathProvider का उपयोग करना।लोड करने के लिए एम्बेडेड संसाधन आंशिक दृश्य
हालांकि, जब मैं उन्हें रेंडर करने का प्रयास यह इस त्रुटि पैदा करता है:
Html.RenderPartial("~/Succeed.Web/Succeed.Web.Controls.SImporter._SImporter.cshtml");
:
The view at '~/Succeed.Web/Succeed.Web.Controls.SImporter._SImporter.cshtml' must derive from WebViewPage, or WebViewPage<TModel>.
जब आंशिक दृश्य प्रतिपादन, एक नियमित रूप से देखें के अंदर, तो वह ऐसा लग रहा है
यह मानने के कारण क्या यह आंशिक दृश्य नहीं है?
संपादित करें: मैंने वर्चुअल फ़ाइल & वर्चुअल फ़ाइल प्रदाता कार्यान्वयन दोनों के लिए अपना कोड पोस्ट किया है जो इस घटक को काम करने के लिए समाधान की तलाश में ठोकर खाती है। यह प्रश्न प्रश्न शीर्षक के आधार पर उन लोगों के लिए भी अच्छी तरह से सेवा करेगा।
पहले संदर्भ के लिए VirtualFile दिया गया है:
public class SVirtualFile : VirtualFile
{
private string m_path;
public SVirtualFile(string virtualPath)
: base(virtualPath)
{
m_path = VirtualPathUtility.ToAppRelative(virtualPath);
}
public override System.IO.Stream Open()
{
var parts = m_path.Split('/');
var assemblyName = parts[1];
var resourceName = parts[2];
assemblyName = Path.Combine(HttpRuntime.BinDirectory, assemblyName);
var assembly = System.Reflection.Assembly.LoadFile(assemblyName + ".dll");
if (assembly != null)
{
return assembly.GetManifestResourceStream(resourceName);
}
return null;
}
}
VirtualPathProvider:
public class SVirtualPathProvider : VirtualPathProvider
{
public SVirtualPathProvider()
{
}
private bool IsEmbeddedResourcePath(string virtualPath)
{
var checkPath = VirtualPathUtility.ToAppRelative(virtualPath);
return checkPath.StartsWith("~/Succeed.Web/", StringComparison.InvariantCultureIgnoreCase);
}
public override bool FileExists(string virtualPath)
{
return IsEmbeddedResourcePath(virtualPath) || base.FileExists(virtualPath);
}
public override VirtualFile GetFile(string virtualPath)
{
if (IsEmbeddedResourcePath(virtualPath))
{
return new SVirtualFile(virtualPath);
}
else
{
return base.GetFile(virtualPath);
}
}
public override CacheDependency GetCacheDependency(string virtualPath, IEnumerable virtualPathDependencies, DateTime utcStart)
{
if (IsEmbeddedResourcePath(virtualPath))
{
return null;
}
else
{
return base.GetCacheDependency(virtualPath, virtualPathDependencies, utcStart);
}
}
}
और बेशक, भूल नहीं है अपनी परियोजना के Global.asax फ़ाइल में इस नए प्रदाता रजिस्टर करने के लिए Application_Start() ईवेंट
System.Web.Hosting.HostingEnvironment.RegisterVirtualPathProvider(new SVirtualPathProvider());
आपको बहुत बहुत धन्यवाद। मेरा एकमात्र अफसोस यह है कि मेरे पास देने के लिए एक वोट है। = पी ऊपर इस उत्तर को वोट दें –
@ डारिन डिमिट्रोव मुझे नहीं लगता कि आप एक चाल के बारे में जानते हैं जिसे मैं इंटेलिजेंस को प्रोत्साहित करने के लिए प्रोत्साहित कर सकता हूं ताकि इसे मेरे डीएल के अंदर एक दृश्य के रूप में पेश किया जा सके? अभी, मेरे विचारों के साथ बहुत कम इंटेलिजेंस समर्थन है जो मैंने अपने डीएल –
@ मैट्यूकॉक्स में रखा है, मुझे विचारों में इंटेलिजेंस के बारे में बहुत कुछ पता नहीं है। यह बहुत समय पहले हुआ था जब मैंने उस पर भरोसा करना बंद कर दिया था। यदि फ़ाइल में '.cshtml' एक्सटेंशन है तो क्या आपको Intellisense नहीं मिलता है? –