2009-08-03 19 views
15

मैं एएसपीनेट 3.5 का उपयोग कर रहा हूं, मेरे समाधान में वर्तमान में 2 प्रोजेक्ट्स, एपीआई क्लास प्रोजेक्ट और एक वेबसाइट प्रोजेक्ट है, क्लास प्रोजेक्ट में मेरे पास checkin.resx नामक संसाधन फ़ाइल है। मेरे लिए मेरी वेबसाइट प्रोजेक्ट से संसाधन फ़ाइलों तक पहुंचने में सक्षम होने के लिए, मुझे "एक्सेस मॉडिफायर" को सार्वजनिक रूप से सेट करना पड़ा, इसने मुझे संसाधनों को acces करने के लिए दृढ़ता से टाइप किए गए नाम का उपयोग करने की अनुमति दी: उदाहरण के लिए: CkiApi.Checkin.Resources.Checkin.OCKI_HeaderText, जहां चेकइन है। resx फ़ाइल और OCKI_HeaderText संसाधन कुंजी है।किसी अन्य प्रोजेक्ट से एक्सेस रेक्स संसाधन फाइल

मुझे जिस समस्या का सामना करना पड़ रहा है वह यह है कि मैं सामने वाले एएसपीएक्स कोड से संसाधनों तक पहुंचने में असमर्थ हूं, उदाहरण के लिए, किसी लेबल की एक टेक्स्ट प्रॉपर्टी या सत्यापन त्रुटि संदेश सेट करना। मैं कोई लाभ नहीं हुआ निम्न सिंटैक्स की कोशिश की है:

<asp:Label AssociatedControlID="IdentMethods" EnableViewState="false" ID="lblIdentMethod" runat="server" Text="<%$ Resources: CkiApi.Checkin.Resources.Checkin, OCKI_IdentificationMethod %>"></asp:Label> 

त्रुटि मैं

कुंजी के साथ 'OCKI_IdentificationMethod' नहीं मिला था संसाधन वस्तु है।

लेकिन मुझे कक्षा के नाम को सेट करने के बावजूद, मुझे एक ही त्रुटि मिलती है, मैं इसे सोच रहा हूं क्योंकि यह वेबसाइट प्रोजेक्ट में देखने की कोशिश कर रहा है लेकिन मैं यह नहीं समझ सकता कि इसे कैसे दिखाना है एपीआई में! क्या कोई मदद कर सकता है?

मैं का उपयोग कर गैर सर्वर साइड टैग सेट करने के लिए निम्न में सक्षम हूँ:

<div id="OckiIntroText"> 
    <%=CkiApi.Checkin.Resources.Checkin.OCKI_IntroText%> 
</div> 

उत्तर

17

संसाधन अभिव्यक्ति (<%$ Resources: ClassKey, ResourceKey %>) दृश्य के पीछे ResourceExpressionBuilder कक्षा का उपयोग करें। यह वर्ग केवल वैश्विक और स्थानीय संसाधनों को देख सकता है (वेबसाइट के App_GlobalResources और App_LocalResources फ़ोल्डरों में)।

इसके बजाय, आप विभिन्न परियोजनाओं से संसाधनों तक पहुंचने के लिए CodeExpressionBuilder कक्षा का उपयोग कर सकते हैं। यहां इसका उपयोग कैसे करें।

App_Code फ़ोल्डर को CodeExpressionBuilder वर्ग जोड़ें:

using System.CodeDom; 
using System.Web.Compilation; 
using System.Web.UI; 

[ExpressionPrefix("Code")] 
public class CodeExpressionBuilder : ExpressionBuilder 
{ 
    public override CodeExpression GetCodeExpression(BoundPropertyEntry entry, 
     object parsedData, ExpressionBuilderContext context) 
    { 
     return new CodeSnippetExpression(entry.Expression); 
    } 
} 

web.config में system.web के लिए निम्न/संकलन भाग जोड़ें: अंत में

<compilation debug="false"> 
    ... 
    <expressionBuilders> 
     <add expressionPrefix="Code" type="CodeExpressionBuilder"/> 
    </expressionBuilders> 
</compilation> 

, आप दृढ़ता से टाइप वर्ग में कॉल कर सकते हैं आपके .resx फ़ाइल के लिए जेनरेट किया गया:

<asp:Label ID="Label1" runat="server" Text="<%$ Code: ClassLibrary1.Resource1.String1 %>" /> 
3

सुनिश्चित नहीं हैं कि अगर यह आपकी समस्या का समाधान होगा, लेकिन आप HttpContext.GetGlobalResourceObject विधि पर ध्यान दिया है?

मैंने इसे फ्रेम प्रोजेक्ट में कक्षा पुस्तकालयों से वेब प्रोजेक्ट में संसाधनों तक पहुंचने के लिए उपयोग किया है - तो शायद आपको इसे दूसरी तरफ इस्तेमाल करने में भाग्य होगा।

+0

आपके उत्तर के लिए धन्यवाद, लेकिन असुविधाजनक रूप से मैं इस कार्यात्मकता को निष्क्रिय करता हूं y <% $ संसाधन: , %> का उपयोग करने जैसा ही है, मैं भी सर्वर-साइड विशेषता में <% = या <% # टैग को बाध्य करने में सक्षम नहीं होगा :( – Raj

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