2012-11-21 21 views
10

के साथ टाइपस्क्रिप्ट का उपयोग करना मैं एक एएसपीएक्स (या रेजर) पृष्ठ में इनलाइन टाइपस्क्रिप्ट प्राप्त करने में सक्षम होना चाहता हूं जो पृष्ठ संकलित करते समय जावास्क्रिप्ट में परिवर्तित हो जाता है।एक इनलाइन सर्वर-साइड '<script>' ब्लॉक और एएसपी.Net

तो:

<script type="text/typescript" runat="server"> 
    ... 
</script> 

हो जाता है ...

<script type="text/javascript"> 
    ... 
</script> 

यह वही मुद्दा यह है कि @ या <% %> ब्लॉक बदल रहे हैं पर होना चाहिए।

यह किसी प्रकार के पेज पोस्ट-प्रोसेसिंग के साथ रन टाइम पर संभव होना चाहिए, लेकिन यह संकलन समय पर अपवाद उत्पन्न नहीं करेगा - मैं किसी भी समय सी # कोड के रूप में स्क्रिप्ट में त्रुटियों को ढूंढना चाहता हूं।

आदर्श रूप से टाइपस्क्रिप्ट इंटेलिजेंस और जैसे इनलाइन <script> ब्लॉक में काम करना चाहिए, जो मुझे लगता है कि यह एक वीएस2012 एक्सटेंशन होना चाहिए।

क्या ऐसा करने का कोई तरीका है?

+2

+1 बहुत बढ़िया विषय – EdSF

उत्तर

5

संक्षिप्त उत्तर नहीं है।

आप एक टाइपस्क्रिप्ट फ़ाइल लिख सकते हैं और संकलित जावास्क्रिप्ट को पेस्ट कर सकते हैं, लेकिन यह उतना करीब है जितना आपको मिलेगा। एक व्यावहारिक समस्या यह होगी कि यदि संकलक ने आपके टाइपस्क्रिप्ट को जावास्क्रिप्ट में बदल दिया है, तो आप अपना टाइपस्क्रिप्ट कोड खो देंगे। यही कारण है कि आपके पास टाइपस्क्रिप्ट फ़ाइल और एक जावास्क्रिप्ट फ़ाइल है।

बाहरी स्क्रिप्ट को संदर्भित करने के बजाय स्क्रिप्ट इनलाइन डालने का अनिवार्य कारण क्या है - शायद आपकी समस्या का एक और समाधान है जिसमें इनलाइन स्क्रिप्ट की आवश्यकता नहीं है?

+1

क्यों? मैं '<% %>' या '@ {}' ब्लॉक की सामग्री खोना नहीं चाहता हूं। इनलाइन ब्लॉक का उपयोग करने के मेरे कारण यहां बहुत लंबे हैं और यहां कुछ विषय हैं। – Keith

+1

@<% and %> की सामग्री के साथ रनटाइम पर वही रहता है। यह परिवर्तित नहीं है। आप बिंदु खो रहे हैं। – x0n

+0

@ x0n ASP.Net निश्चित रूप से संकलित करता है, हालांकि कॉन्फ़िगरेशन के आधार पर यह जेआईटी (जब पहला उपयोगकर्ता एएसपीएक्स पेज पर जाता है) संकलित कर सकता है या अग्रिम संकलित कर सकता है (जिसके परिणामस्वरूप प्रत्येक एएसपीएक्स पेज खाली प्लेसहोल्डर में कम हो जाता है)। '<% %> 'की सामग्री ब्राउज़र में आउटपुट नहीं है, लेकिन इसे कंपाइलर द्वारा भी उठाया जा सकता है और वीएस में चेतावनी दी जा सकती है। मैं एक टीएस ब्लॉक को '<% %>' ब्लॉक के विशेष मामले की तरह व्यवहार करना चाहता हूं। – Keith

3

आप एक सर्वर नियंत्रण जो रनटाइम के दौरान कोड संकलित बना सकते हैं, और कैश यह:

[DefaultProperty("Text")] 
[ToolboxData("<{0}:TypeScript runat=server></{0}:TypeScript>")] 
public class TypeScript : WebControl 
{ 
    public string Text { get; set; } 

    protected override void RenderContents(HtmlTextWriter output) 
    { 
     output.AddAttribute(HtmlTextWriterAttribute.Type, "text/javascript"); 
     if (!string.IsNullOrEmpty(this.ID)) 
     { 
      output.AddAttribute(HtmlTextWriterAttribute.Id, this.ID); 
     } 
     output.RenderBeginTag("script"); 
     output.Write(CompileToJavaScript(Text)); 
     output.RenderEndTag(); 
    } 

    private string CompileToJavaScript(string typeScript) 
    { 
     // TODO: Call tsc with the code, and return the result. 
    } 
} 

आप JScript.NET साथ tsc.js संकलित करने के लिए यदि आप आईओ को लागू करने की परवाह सक्षम हो सकता है -layer, और कुछ JScript.Net (जावास्क्रिप्ट नहीं) वाक्यविन्यास त्रुटियों को बाहर निकाला।

+1

+1 और मुझे यह विचार पसंद है, लेकिन इसमें दो समस्याएं हैं: टीएस का संकलन रन-टाइम होगा (मेरे पोस्ट प्रोसेसर विचार की तरह) बहुत सारे टीएस के फायदे खो देते हैं। इसके अलावा VS2012 नियंत्रण की सामग्री केवल सादे पाठ होगी। – Keith

0

हालांकि यह आपकी समस्या का वास्तविक समाधान नहीं है, लेकिन आप अपने टाइपस्क्रिप्ट कोड को <script type="text/typescript"> में क्यों नहीं छोड़ते हैं और इसे रनटाइम पर संकलित करने के लिए Typescript Compile का उपयोग करते हैं?

+0

क्योंकि तब आपको टीएस के संकलन समय के फायदे नहीं मिलते हैं, और उपयोगकर्ता के लिए एक बड़ी जेएस लाइब्रेरी/संकलन ओवरहेड जोड़ा जाता है। आपको सभी समस्याएं और कोई लाभ नहीं मिलता है। – Keith

2
  • इसके लिए चारों ओर एक काम है, मैं क्या एक स्क्रिप्ट टैग में चर उस्तरा से जरूरत की घोषणा

    <script type="text/javascript"> 
    
    //Razor variables initialized here and declared in the TypescriptFile.ts file 
    
    var url = "@Url.Action("NewRequest", "Request")"; 
    
    </script> 
    
  • अगले टाइपप्रति फ़ाइल में यूआरएल चर घोषित है

    //TypescriptFile.ts 
    declare var url: string; 
    alert(url); 
    
  • इसका उपयोग

  • यह देखने के लिए उदास ual Studio 2013 अभी भी सर्वर साइड समर्थन प्रदान नहीं करता है।

+0

चीयर्स, लेकिन वास्तव में यह नहीं है कि मैं किस बारे में पूछ रहा हूं। मैं जावास्क्रिप्ट में कोड नगेट्स को शामिल करने के बजाय पेज सर्वर पक्ष में टाइपस्क्रिप्ट कोड ब्लॉक इनलाइन को पार्स करना चाहता हूं। – Keith

+0

चीयर्स कीथ, टिप्पणी के लिए धन्यवाद। निश्चित रूप से, मैं समझता हूं कि आप क्या चाहते हैं, इसकी भी आवश्यकता है, लेकिन http://channel9.msdn.com/Events/Build/2013/9-006 के अनुसार, ऐसा प्रतीत नहीं होता है, शायद जल्द ही पर्याप्त हो रहा है। मैंने यह जवाब पोस्ट किया था क्योंकि लोग कभी-कभी इस आवश्यकता के साथ इस धागे को पढ़ते थे और इससे मदद मिल सकती है :) –