2012-01-26 16 views
5

से उपयोगकर्ता नियंत्रण प्राप्त करें मैं उपयोगकर्ता नियंत्रण DerivedUserControl.ascx बनाना चाहता हूं जो अन्य उपयोगकर्ता नियंत्रण BaseUserControl.ascx बनाता है। आधार उपयोगकर्ता नियंत्रण आवश्यकतानुसार System.Web.UI.UserControl से निकला है। ये उपयोगकर्ता नियंत्रण अलग-अलग फ़ोल्डर्स में परिभाषित किए जाते हैं। क्योंकि मैं विजुअल स्टूडियो 2010 वेब साइट प्रोजेक्ट (मैं वेब एप्लिकेशन प्रोजेक्ट पर स्विच करने में सक्षम नहीं हूं) का उपयोग कर रहा हूं, इन उपयोगकर्ता नियंत्रणों को नामस्थान के अंदर परिभाषित नहीं किया गया है।कस्टम उपयोगकर्ता नियंत्रण बेस क्लास

मेरी समस्या यह है कि जब मैं प्रोजेक्ट को संकलित करने का प्रयास करता हूं तो व्युत्पन्न उपयोगकर्ता नियंत्रण की बेस क्लास को हल नहीं किया जा सकता है (जाहिर है क्योंकि संकलक को पता नहीं है कि .ascx फ़ाइल बेस क्लास को परिभाषित करती है)। क्या इस मुद्दे को हल करने का कोई तरीका है?

मैंने सफलता के बिना, कल्पना की जा सकने वाली हर चीज की कोशिश की। किसी भी तरह की सहायता का स्वागत किया जाएगा।

BaseUserControl.ascx

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="BaseUserControl.ascx.cs" Inherits="BaseUserControl" %> 

BaseUserControl.ascx.cs

public partial class BaseUserControl : System.Web.UI.UserControl 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 

    } 
} 

DerivedUserControl.ascx

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="DerivedUserControl.ascx.cs" Inherits="DerivedUserControl" %> 

DerivedUserControl.ascx.cs

public partial class DerivedUserControl : BaseUserControl 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 

    } 
} 

त्रुटि

The type or namespace name 'BaseUserControl' could not be found 

उत्तर

2

एएसपी.नेट वेब साइट (जैसा कि एक वेब प्रोजेक्ट से जुड़ा हुआ है) का उपयोग करते समय आपको अपने DerivedUserControl.ascx में <@Reference> तत्व जोड़ने की आवश्यकता है।

यह MSDN से ...

इंगित करता है कि किसी अन्य उपयोगकर्ता नियंत्रण, पेज स्रोत फ़ाइल, या मनमाने ढंग कुछ आभासी पथ पर स्थित फ़ाइल गतिशील संकलित किया जाना चाहिए और वर्तमान ASP.NET फ़ाइल के खिलाफ जुड़े हुए (वेब पेज, उपयोगकर्ता नियंत्रण, या मास्टर पेज) जिसमें यह निर्देश घोषित किया गया है।

<%@ Reference VirtualPath="~/FolderName1/BaseUserControl.ascx" %>

कर लेने के बाद आप यह इतना

public partial class DerivedUserControl : ASP.foldername1.baseusercontrol_ascx 

तरह संदर्भित कर सकते हैं कि कहाँ FolderName1 फ़ोल्डर आपके BaseUserControl में है।

+0

वाह, ये 'ASP.base_baseusercontrol_ascx' का उपयोग करके काम करने लगते हैं। – CodeZombie

+0

मैं इसे लेता हूं 'बेस' उस फ़ोल्डर का नाम है जो BaseUserControl.ascx में रहता है। –

+0

बहुत बहुत धन्यवाद, आपने वास्तव में अपना दिन बचाया: डी – CodeZombie

0

समस्या हो कि DerivedUserControl.ascx DLL कि BaseUserControl शामिल करने के लिए पहुँच नहीं है प्रकट होता है। सुनिश्चित करें कि आप डीएलएल का संदर्भ जोड़ते हैं और स्थानीय = सत्य की प्रतिलिपि बनाते हैं।

+0

मैं एक वेब साइट प्रोजेक्ट का उपयोग करता हूं इसलिए मुझे संकलित असेंबली (डीएलएल) नहीं मिलती है। – CodeZombie

+0

पथ को इनहेरिट्स में डालने का प्रयास करें, ताकि वह कोड को उसी डायरेक्टो –

+0

में नहीं मिल सके * वेबसाईट * प्रोजेक्ट असेंबली गतिशील रूप से जेनरेट की गई हैं –

0

यह संकलित करता है नहीं:

namespace MyBase 
{ 
    public class BaseUserControl : System.Web.UI.UserControl 
    { } 
} 
public class DerivedUserControl : BaseUserControl 
{ } 

यह संकलित करता है:

namespace MyBase 
{ 
    public class BaseUserControl : System.Web.UI.UserControl 
    { } 
} 
public class DerivedUserControl :MyBase.BaseUserControl 
{ } 

तो काफी नाम स्थान + डॉट + अपने आधार वर्ग के नाम का नाम जोड़ें। शुभकामनाएँ!

+0

डिफ़ॉल्ट रूप से वेब साइट प्रोजेक्ट्स का उपयोग करके कोई नेमस्पेस सेट नहीं है। – CodeZombie

1

एक नियमित रूप से वर्ग/बनाएँ। BaseUserControl.cs नामक आपकी बेस क्लास के लिए सीएस:

public class BaseUserControl : System.Web.UI.UserControl 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 

    } 
} 
+0

यह एक अच्छा समाधान होगा। दुर्भाग्यवश मैं बेस क्लास को संशोधित नहीं कर सकता क्योंकि यह एक सीएमएस का हिस्सा है। – CodeZombie

+0

यह विभिन्न परिस्थितियों में तकनीकी रूप से ध्वनि तय है। – Patrick

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