أعتقد أن الجميع حاولوا استخدام JavaScript في عرض ، ويمكنك استخدام بناء جملة Razor مباشرة لاستدعاء بعض طرق .NET. نظرًا لأن الكود التالي متداخل في عرض الحلاقة:
<script> var currdate = '@datetime.now' ؛ // اتصل مباشرةً
ولكن هناك موقف آخر هو أنه إذا كنت أرغب في استخدام الحلاقة في ملف JS منفصل ، فلن تعمل الطريقة أعلاه ، لأن MVC لن يفسر ملف JS مباشرة ، ويمكن وضعه فقط في عرض الحلاقة. ومع ذلك ، أوصي هنا بمكتبة طرف ثالث لك ، والتي تتيح لك استخدام Razor مباشرة في ملفات JS المستقلة
اسم هذه المكتبة هو Razorjs. هذا مشروع مفتوح المصدر. يمكنك تنزيل الرمز المصدر من العنوان التالي:
https://bitbucket.org/djsolid/razorjs
أو يمكنك تثبيته مباشرة من خلال nuget:
PM> تثبيت Razorjs
حسنًا ، دعنا نتحدث عما يمكن أن تجلبه هذه المكتبة إلينا أولاً. بعد التثبيت ، يمكنك استخدام جميع الأساليب المدعومة .NET مباشرة في ملف JS. على سبيل المثال ، يمكن وضع الرمز أعلاه مباشرة في ملف JS مستقل للاستخدام. بالإضافة إلى ذلك ، يمكنك أيضًا الرجوع إلى مساحة الاسم الكاملة لـ .NET في ملف JS. إذا كنت ترغب في الاتصال بكائن الملف لقراءة محتوى الملف النصي ، فيمكنك الرجوع مباشرة إلى مساحة اسم System.io:
@us system.io ؛ var s = 'hello at @dateTime.now /n @file.readalltext (system.web.hosting.hostingenvironment.mappath ("~ /web.config")))' ؛بعد التشغيل ، يمكنك الحصول مباشرة على جميع المحتويات في ملف web.config في JS. يبدو جيدا ، هاها. فكيف بالضبط هذا النوع من المكتبة يعمل؟ في الواقع ، فإنه يستخدم مكتبة الفصل تسمى RazorEngine لتحقيق الآثار المذكورة أعلاه. RazorEngine هو محرك شرح متوحد قوي للغاية وقد استخدمته في بعض المشاريع من قبل. من خلال هذا المحرك ، يمكنك حتى استخدام بناء جملة Razor مباشرة في شكل فوز. هاها ، أتساءل عما إذا كان لديك أي فكرة عن فوائدها؟
حسنًا ، جيد ، مع هذا المحرك ، يمكنك استخدام حلاقة MVC في بيئة ويب مستقلة تمامًا. تتيح لك هذه الوظيفة جعل بعض القوالب المرنة مريحة للغاية ، مثل بعض قوالب البريد الإلكتروني. يمكنك استخدام طرق .NET المختلفة مباشرة أو حتى الكائنات المخصصة في القالب ، ثم إنشاء المحتوى المطلوب ديناميكيًا. حسنًا ، لكن هذا المحرك ليس ما أريد أن أقدمه هذه المرة ، فأنا أتحدث عنه هنا فقط
بعد ذلك ، دعنا نتحدث عن استخدام Razorjs. إذا قمت بتثبيته مباشرة من خلال Nuget ، فستقوم تلقائيًا بتكوين Web.Config لك. هذه هي طريقة التثبيت الموصى بها. خلاف ذلك ، يجب عليك إضافة التكوين في web.config بنفسك. هناك عدة أماكن ، ولن أخوض في التفاصيل هنا. يمكنك مقارنتها بعد تثبيته. كما أنه من السهل جدًا استخدام Razorjs ، فقط الرجوع إلى ملف JS الذي تريده باستخدام بناء الجملة التالي:
<p> @html.razorjsinline ("~/scripts/example.js") </p>ومع ذلك ، هناك شيء واحد يجب ملاحظة أنه سيكون هناك دليل في الويب الخاص بك.
<razorjssettings handlerpath = "~/razorjs.axd"> <luquestPaths> <add path = "~/scripts"/> </shendpaths> </razorjssettings>
آخر شيء أريد أن أتحدث عنه هو حدوده. هناك أشياء جيدة وجوانب سيئة. نظرًا لأنه يستخدم RazorEngine ، لا يمكنك استخدام طريقة HTML Helper لـ MVC في JS ، أي جميع الطرق التي تبدأ بـ HTML. مشكلة أخرى هي أنه لا يمكن التعرف على رمز التعليق في JS. وهذا هو ، إذا كنت تستخدم أساليب .NET في التعليقات ، سيتم تنفيذها أيضًا. إذا كانت طريقتك صحيحة ، فلن تكون هناك مشكلة. خلاف ذلك ، سيتم مقاطعة تنفيذ JS وسيتم الإبلاغ عن خطأ مباشرة. لذلك لا تعتقد أن الطريقة غير المجدية كافية للتعليق.
فيما يتعلق بمشكلة عدم القدرة على تنفيذ HTML Helper ، أقدم حلًا آخر هنا ، ولكن هذا يتيح لك تعديل رمز المصدر الخاص به. يمكن للأصدقاء الذين يريدون إرم تجربته. في الواقع ، يمكنك استخدام العديد من الأساليب المخصصة للقيام بذلك ، وهو أكثر مرونة ومريحة. بعد تنزيل رمز مصدر Razorjs ، يمكنك تعديله مباشرة عليه وإعادة ترجمة DLL. طريقة أخرى هي استخدام رمز المصدر الخاص به كمشروع آخر وإضافته مباشرة إلى مشروعك الخاص.
في رمز المصدر الخاص به ، افتح ملف htmltemplatebase.cs ، ويمكنك إضافة طرقك الخاصة هنا ، ثم يمكن استدعاء جميع الطرق المضافة هنا مباشرة في JS. إذا تمكنت من العثور على طريقة HREF مغلفة في الكود المصدري ، فيمكنك تحويل عنوان URL إلى عنوان URL المتاح على العميل طلب. وفقًا لطريقة الكتابة هذه ، يمكننا إضافة أساليبنا الخاصة ، مثل ما يلي هي طريقتي لتغليف ملفات موارد دولية ديناميكيًا ، حتى نتمكن من استخدام ملفات الموارد .NET مباشرة في JS للتدويل:
الفئة العامة htmltemplateBase: TemplateBase {// يدويًا اتصل بمدير ملفات الموارد الخاصة الموارد الثابتة الموارد = (ResourceManager) system.type.gettype ("Razorjs.Resource"). getProperty ("ResourceManager"). htmltemplateBase () {url = new urlhelper (httpcontext.current.request.requestContext) ؛ } السلسلة العامة HREF (String Originurl) {return extensions.ResolveUrl (OriginuRl) ؛ } السلسلة العامة getLangtext (String langkey) {إرجاع اللغة ذات الصلة بناءً على موارد إرجاع المفتاح. getString (langkey) ؛ } urlhelper url {get ؛ تعيين؛ }}ثم نسميها مباشرة في JS:
var s = 'getLangText ("coderblog")' ؛ console.log (s) ؛بعد التشغيل ، يمكنك إدخال محتوى مفتاح CoderBlog مباشرة في JS.