এএসপনেটের বাইরে রেজার ভিউ ইঞ্জিন ব্যবহার করা কি সম্ভব?


102

আমি যদি রেজার ভিউ ইঞ্জিনটি দেখি, তবে আমি খুব সুন্দর এবং সংক্ষিপ্ত বাক্য গঠনটি দেখতে পাচ্ছি যা বিশেষত এইচটিএমএল তৈরির সাথে আবদ্ধ নয়। সুতরাং আমি আশ্চর্য হই, "সাধারণ"। নেট পরিবেশে এসপিএনটির বাইরের ইঞ্জিনটি ব্যবহার করা কত সহজ হবে উদাহরণস্বরূপ পাঠ্য, কোড, ...

যে কোনও পয়েন্টার, উদাহরণস্বরূপ, মন্তব্য বা ব্যাখ্যা স্বাগত।

উত্তর:


80

এখানে দুটি বিষয় আছে:

  1. হ্যাঁ, আপনি এএসপি.এনইটি অ্যাপ ডোমেনের প্রসঙ্গের বাইরে রেজার ভিউ ইঞ্জিন চালাতে পারেন, যেমন অ্যান্ড্রুয়ের ব্লগে ব্যাখ্যা করা হয়েছে: http://vibrantcode.com/blog/2010/11/16/hosting-razor-outside-of -aspnet-সংশোধিত-জন্য-mvc3-rc.html
  2. তবে রেজারটি এখনও প্রাথমিকভাবে xML- এর মতো মার্কআপ (যেমন এইচটিএমএল) তৈরি করতে দৃষ্টি নিবদ্ধ করে যে রেজার পার্সার <tags>কোড এবং মার্কআপের মধ্যে রূপান্তর নির্ধারণ করতে উপস্থিতি ব্যবহার করে । আপনি সম্ভবত এটি কোনও পাঠ্য উত্পন্ন করতে ব্যবহার করতে পারেন তবে যখন আপনার আউটপুটটি আপনার উদ্দেশ্যগুলি কী তা সম্পর্কে রেজারের অনুমানগুলির সাথে মেলে না তবে আপনি সমস্যার সমাধান করতে পারেন।

সুতরাং উদাহরণস্বরূপ যখন এটি বৈধ রেজার কোড ( <div>ট্যাগের কারণে ):

@if(printHello) {
   <div>Hello!</div>
}

নিম্নলিখিত স্নিপেটটি অবৈধ (কারণ হ্যালো! এখনও কোড হিসাবে গণ্য হচ্ছে):

@if(printHello) {
   Hello!
}

তবে একটি বিশেষ <text>ট্যাগ রয়েছে যা মাল্টি-লাইন ব্লকগুলির জন্য একটি संक्रमणকে জোর করার জন্য ব্যবহার করা যেতে পারে ( <text>ট্যাগটি রেন্ডার করা হবে না):

@if(printHello) {
   <text>Hello!
   Another line</text>
}

একটি একক লাইনকে সংক্রমণের জন্য বাধ্য করার জন্য আরও সংক্ষিপ্ত বাক্য গঠন রয়েছে @::

@if(printHello) {
   @:Hello!
}

2
আচ্ছা আমি এটি ইমেল বা অন ফ্লাইট আইরন পাইথন কোড জেনারেশন জাতীয় জিনিস তৈরি করতে ব্যবহার করার কথা ভাবছিলাম। যেহেতু এগুলি ট্যাগ ব্যবহার করে না, তাই অন্য বিকল্পগুলির দিকে নজর দেওয়া আরও ভাল। উত্তর করার জন্য ধন্যবাদ.
থমাস

6
@ থমাস রেজারকে those পরিস্থিতিগুলিতে ঠিকঠাক কাজ করা উচিত, আপনাকে কেবল সেই ম্যাজিক <text>ট্যাগ যুক্ত করতে হবে বা @:এখন থেকে প্রতিটি ব্যবহার করতে হবে । রেজার সিনট্যাক্সের জন্য একবার ভিএস সম্পাদক সমর্থনটি প্রকাশিত হলে তা রূপান্তরগুলি কখন ঘটে তা বলা সহজ।
marcind

34

রেজারইগাইন পরীক্ষা করুন , এটি রেজার শীর্ষে একটি ছোট কাঠামো তৈরি করা হয়েছে যা আপনাকে এটি করতে দেয়।


.NET 4 টার্গেটিং অ্যাপ্লিকেশনটিতে এই প্রকল্পটি ইনস্টল করতে সমস্যা হয়েছে, আপডেট দরকার।
জনি_ডি

22

রেজারটিম্পলেটস লাইব্রেরিতে একবার দেখুন । এটি রেজারইঙ্গাইন লাইব্রেরির চেয়ে হালকা ওজনের, এটি থ্রেড-নিরাপদ এবং খুব সুন্দর ন্যূনতম ইন্টারফেস রয়েছে।

কোনও টেমপ্লেট সংকলন এবং উপস্থাপন কোডের দুটি লাইনের মতোই সহজ:

var template = Template.Compile("Hello @Model.Name!");
Console.WriteLine(template.Render(new { Name = "World" }));

1
আপনি কি রেজার টেম্পলেটগুলির থ্রেড নিরাপত্তা হাইলাইট করছেন বি / সি এই প্রশ্নের জন্য অন্য প্রস্তাবিত সমাধানগুলির মধ্যে একটি নয়? আমি বিশেষ করে রেজারইঙ্গিনে আগ্রহী।
স্টিভ শেফলার

9

রেজারইঙ্গাইন এবং রেজার টেম্প্লেটস উভয়ই ইতিমধ্যে এখানে উল্লেখ করা হয়েছে তবে রেজারম্যাচাইন দেখুন । আপনি সহজেই আপনার নন-এমভিসি অ্যাপ্লিকেশনটি বিদ্যমান এমভিসি অ্যাপ্লিকেশনটির (another / ভিউ) ফোল্ডারের দিকে নির্দেশ করতে পারেন, সঠিক মডেল প্রেরণে এক্সিকিউট করতে পারেন এবং কোডের 2 লাইনে রেন্ডার আউটপুট পেতে পারেন:

var sb = new StringBuilder();

//RazorMachine magic:
//*tweets* is basically List<TwitterPost> - simple collection of custom POCO
//first param for rm.ExecuteUrl points to ~/Views folder, MVC style
var rm = new RazorMachine(htmlEncode: false);
ITemplate template = rm.ExecuteUrl("~/twitter/twitter", tweets);

//do whatever you want with result
sb.Append(template);

3

কোড বা পাঠ্য উত্পন্ন করুন: আপনার অর্থ টি 4 টেম্পলেটগুলির মতো: http://msdn.microsoft.com/en-us/library/bb126445.aspx বা কোডস্মিত সরঞ্জাম?


এটির উন্নতি প্রয়োজন কারণ টি 4 এর রেজারের সাথে মিল রয়েছে এবং এটি একটি আসল উদ্দেশ্যমূলক কোড জেনারেটর যা ভিজ্যুয়াল স্টুডিওতে একটি বৈশিষ্ট্য হিসাবে বাক্স থেকে বেরিয়ে আসে - মূলত এটি একটি সর্ব-উদ্দেশ্য 'রেজার'
ড্যান লিং

এটি আমার বোঝা যায় যে সংকলনের সময় টি 4 টেম্পলেটগুলি কেবল পরিবর্তন করা যেতে পারে, .tt ফাইলটি রূপান্তরিত হয় এবং .cs ফাইল হিসাবে সংরক্ষণ করা হয়। আমার ব্যবহারে একটি আধা-প্রযুক্তিগত ব্যবহারকারী অ্যাপ্লিকেশনটি পুনর্নির্মাণ না করে টেমপ্লেট আপডেট করতে চান। এটির কোনও সহজ উপায় কি টি 4 টেম্পলেট ব্যবহার করে অর্জন করা যায়?
দভেব

সম্ভবত, যতক্ষণ না এটি যা কিছু উত্পন্ন করছে তা ব্যাখ্যা করা যায়, যেমন সিএসএইচটিএমএল রানটাইম সময়ে রেজার ইঞ্জিন দ্বারা হতে পারে। আপনি কোড তৈরির জন্য প্রোগ্রামিয়ালি এটিকে ট্রিগারও করতে পারেন, তবে সংকলিত কোডটি ব্যবহারযোগ্য হওয়ার জন্য সংকলক দ্বারা পার্স করতে হবে ....
ব্রায়ান মেইনস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.