ฉันเชื่อว่าทุกคนพยายามใช้ JavaScript ในมุมมองและคุณสามารถใช้ไวยากรณ์มีดโกนโดยตรงเพื่อเรียกใช้วิธีการบางอย่างของ. NET เป็นรหัสต่อไปนี้ซ้อนกันในมุมมองมีดโกน:
<script> var currdate = '@dateTime.now'; // เรียกโดยตรงกับ. net method console.log (currdate) </script>
แต่สถานการณ์อื่นคือถ้าฉันต้องการใช้มีดโกนในไฟล์ JS แยกต่างหากวิธีการข้างต้นจะไม่ทำงานเพราะ MVC จะไม่ตีความไฟล์ JS โดยตรงและสามารถใส่เข้าไปในมุมมองมีดโกนได้เท่านั้น อย่างไรก็ตามที่นี่ฉันขอแนะนำไลบรารีบุคคลที่สามให้คุณซึ่งช่วยให้คุณใช้มีดโกนโดยตรงในไฟล์ JS อิสระ
ชื่อของห้องสมุดนี้คือ Razorjs นี่คือโครงการโอเพ่นซอร์ส คุณสามารถดาวน์โหลดซอร์สโค้ดได้จากที่อยู่ต่อไปนี้:
https://bitbucket.org/djsolid/razorjs
หรือคุณสามารถติดตั้งได้โดยตรงผ่าน Nuget:
PM> Install-Package Razorjs
ตกลงมาพูดถึงสิ่งที่ห้องสมุดนี้สามารถนำมาให้เราก่อน หลังจากการติดตั้งคุณสามารถใช้วิธีการที่รองรับ. NET ทั้งหมดในไฟล์ JS ได้โดยตรง ตัวอย่างเช่นรหัสข้างต้นสามารถวางโดยตรงในไฟล์ JS อิสระเพื่อใช้งาน นอกจากนี้คุณยังสามารถอ้างถึงเนมสเปซแบบเต็มของ. NET ในไฟล์ JS หากคุณต้องการเรียกวัตถุไฟล์เพื่ออ่านเนื้อหาของไฟล์ข้อความคุณสามารถอ้างอิงโดยตรงไปยัง Namespace System.io:
@using system.io; var s = 'สวัสดีที่ @dateTime.now /n @file.ReadallText (system.web.hosting.hostingenvironment.mappath ("~ /web.config")))';หลังจากทำงานแล้วคุณสามารถรับเนื้อหาทั้งหมดในไฟล์ web.config โดยตรงใน JS มันดูดีทีเดียวฮ่าฮ่า แล้วไลบรารีประเภทนี้ทำงานอย่างไร? ในความเป็นจริงมันใช้ห้องสมุดคลาสที่เรียกว่า razorengine เพื่อให้ได้เอฟเฟกต์ข้างต้น Razorengine เป็นเอ็นจิ้นคำอธิบายมีดโกนที่ทรงพลังมากและฉันเคยใช้มันในบางโครงการมาก่อน ผ่านเครื่องยนต์นี้คุณสามารถใช้ไวยากรณ์มีดโกนได้โดยตรงในรูปแบบการชนะ ฮ่าฮ่าฉันสงสัยว่าคุณมีความคิดเกี่ยวกับประโยชน์ของมันหรือไม่?
ดีด้วยเครื่องยนต์นี้คุณสามารถใช้มีดโกนของ MVC ในสภาพแวดล้อมเว็บที่เป็นอิสระอย่างสมบูรณ์ ฟังก์ชั่นนี้ช่วยให้คุณสามารถสร้างเทมเพลตที่ยืดหยุ่นได้อย่างสะดวกสบายเช่นเทมเพลตอีเมล คุณสามารถใช้วิธี. NET ต่างๆโดยตรงหรือแม้แต่วัตถุที่กำหนดเองในเทมเพลตจากนั้นสร้างเนื้อหาที่ต้องการแบบไดนามิก ตกลง แต่เครื่องยนต์นี้ไม่ใช่สิ่งที่ฉันต้องการแนะนำในครั้งนี้ฉันแค่พูดถึงที่นี่
ถัดไปเรามาพูดถึงการใช้ Razorjs หากคุณติดตั้งโดยตรงผ่าน NUGET คุณจะกำหนดค่า web.config ให้คุณโดยอัตโนมัติ นี่คือวิธีการติดตั้งที่แนะนำ มิฉะนั้นคุณต้องเพิ่มการกำหนดค่าใน web.config ด้วยตัวคุณเอง มีหลายสถานที่และฉันจะไม่เข้าไปดูรายละเอียดที่นี่ คุณสามารถเปรียบเทียบได้หลังจากติดตั้ง นอกจากนี้ยังใช้ Razorjs ง่ายมากเพียงอ้างถึงไฟล์ JS ที่คุณต้องการใช้ไวยากรณ์ต่อไปนี้:
<p> @html.razorjsinline ("~/scripts/example.js") </p>อย่างไรก็ตามสิ่งหนึ่งที่ควรทราบคือจะมีไดเรกทอรีใน web.config ของคุณที่อนุญาตให้ Razorjs ใช้นั่นคือไฟล์ JS ของคุณจะต้องอยู่ในไดเรกทอรีนี้ก่อนที่คุณจะสามารถใช้วิธีนี้เพื่ออ้างอิง:
<razorjssettings handlerPath = "~/razorjs.axd"> <eledPaths> <เพิ่ม path = "~/scripts"/> </eralepaths> </razorjssettings>
สิ่งสุดท้ายที่ฉันต้องการพูดถึงคือข้อ จำกัด มีสิ่งดีๆและด้านที่ไม่ดี เนื่องจากใช้ RazorEgnine คุณจึงไม่สามารถใช้วิธี HTML Helper ของ MVC ใน JS นั่นคือวิธีทั้งหมดที่เริ่มต้นด้วย @HTML ปัญหาอีกประการหนึ่งคือไม่สามารถจดจำรหัสความคิดเห็นใน JS ได้ นั่นคือถ้าคุณใช้วิธี. NET ในความคิดเห็นมันก็จะถูกดำเนินการด้วย หากวิธีการของคุณถูกต้องจะไม่มีปัญหา มิฉะนั้นการดำเนินการของ JS จะถูกขัดจังหวะและจะมีการรายงานข้อผิดพลาดโดยตรง ดังนั้นอย่าคิดว่าวิธีที่ไร้ประโยชน์นั้นเพียงพอที่จะแสดงความคิดเห็น
เกี่ยวกับปัญหาที่ไม่สามารถเรียกใช้งาน @HTML Helper ได้ฉันให้บริการโซลูชันอื่นที่นี่ แต่สิ่งนี้ช่วยให้คุณสามารถแก้ไขซอร์สโค้ดได้ เพื่อนที่ต้องการโยนสามารถลองได้ ในความเป็นจริงคุณสามารถใช้วิธีการที่กำหนดเองมากมายในการทำสิ่งนี้ซึ่งมีความยืดหยุ่นและสะดวกกว่า หลังจากดาวน์โหลดซอร์สโค้ด razorjs คุณสามารถแก้ไขได้โดยตรงและคอมไพล์ DLL อีกครั้ง อีกวิธีหนึ่งคือการใช้ซอร์สโค้ดเป็นโครงการอื่นและเพิ่มลงในโครงการของคุณโดยตรง
ในซอร์สโค้ดให้เปิดไฟล์ htmltemplatebase.cs และคุณสามารถเพิ่มวิธีการของคุณเองได้ที่นี่จากนั้นวิธีการทั้งหมดที่เพิ่มที่นี่สามารถเรียกได้โดยตรงใน JS หากคุณสามารถค้นหาวิธี HREF ที่ห่อหุ้มได้ในซอร์สโค้ดคุณสามารถแปลง URL เป็น URL ที่มีอยู่ในไคลเอนต์ที่ร้องขอ ตามวิธีการเขียนนี้เราสามารถเพิ่มวิธีการของเราเองเช่นวิธีการต่อไปนี้เป็นวิธีการของฉันในการห่อหุ้มไฟล์ทรัพยากรระหว่างประเทศแบบไดนามิกเพื่อให้เราสามารถใช้ไฟล์ทรัพยากร. NET ใน JS สำหรับสากลได้โดยตรง:
ชั้นเรียนสาธารณะ htmltemplatebase: templatebase {// โทรด้วยตนเองเรียกตัวจัดการไฟล์ทรัพยากรส่วนตัวทรัพยากรทรัพยากร ResourceManager แบบคงที่ = (ResourceManager) System.type.getType ("Razorjs.resource") GetProperty ("ResourceManager") public htmlTemplateBase () {url = ใหม่ urlhelper (httpContext.current.request.requestcontext); } สตริงสาธารณะ HREF (String OriginalUrl) {return extensions.resolveurl (OriginalUrl); } สตริงสาธารณะ getLangText (สตริง langkey) {ส่งคืนภาษาที่เกี่ยวข้องตามทรัพยากรการส่งคืนคีย์ getString (langkey); } URL URLHELPER สาธารณะ {รับ; ชุด; -จากนั้นเรียกมันโดยตรงใน JS:
var s = '@getLangtext ("coderblog")'; console.log (s);หลังจากทำงานแล้วคุณสามารถป้อนเนื้อหาของรหัส CoderBlog โดยตรงใน JS