جملة الحلاقة وجافا سكريبت
-
27-09-2019 - |
سؤال
كاختبار ، أقوم بتحويل تطبيق إثبات المفهوم الذي كتبناه من نماذج الويب إلى Razor ، ببساطة حتى نتمكن من تقييمه.
لقد واجهت مشكلة واحدة حتى الآن تجعل رأسي مؤلمًا .. توليد جافا سكريبت من جانب العميل ...
أشكال الويب
<script type="text/javascript">
var jqGridIdList = "<%: Url.Action ("getidlist", "office", new { area = "reports" }) %>";
var availableIds = [];
<% for (var i = 0; i < Model.Data.Count (); i++) { %>
availableIds.push({ value : "<%: Model.Data.ElementAt (i).Text %>", label : "<%: Model.Data.ElementAt (i).Text %>" });
<% } %>
</script>
بناء الجملة الحلاقة
<script type="text/javascript">
var jqGridIdList = "@Url.Action("getidlist", "office", new { area = "reports" })";
var availableIds = [];
@for(var i = 0; i < Model.Data.Count (); i++) {
availableIds.push({ value : "@Model.Data.ElementAt(i).Text", label : "@Model.Data.ElementAt(i).Text" });
}
</script>
يمنحني المترجم الخطأ التالي على خط "Avavoreids.push":
رسالة خطأ المترجم: CS1525: مصطلح التعبير غير صالح "{'
من الواضح أنه يحاول تجميعه كـ C#... لكن كيف أوقفه؟
شكرًا،
كيرون
المحلول
تحتاج إلى لفه في العنصر الزائف <text>
. سيؤدي ذلك إلى تبديل المحلل إلى وضع HTML وسيقوم بعد ذلك بتحليل JavaScript كجزء من HTML وليس C#. السبب في حدوثه هو @for()
يعتبر AC# كتلة وأي شيء يتم التعامل معه أيضًا C# حتى يتم هروبه بواسطة علامة HTML. نظرًا لأنك ربما لا تريد حلاقة علامة HTML توفر <text>
علامة لتبديل أوضاع.
إذا لاحظت الفرق في ASP.NET الخاص بك ، فأنت تنهي <% for
خط مع %>
الذي يأخذها من وضع C#. إذا قمت بتنزيل امتداد Razor Highlighter لـ Visual Studio 2010 ، فستساعدك على معرفة متى يتم التعامل مع التعليمات البرمجية على أنها رمز ويتم التعامل مع HTML باسم HTML.
<script type="text/javascript">
var jqGridIdList = "@Url.Action("getidlist", "office", new { area = "reports" })";
var availableIds = [];
@for(var i = 0; i < Model.Data.Count (); i++) {
<text>availableIds.push({ value : "@Model.Data.ElementAt(i).Text", label : "@Model.Data.ElementAt(i).Text" });</text>
}
</script>
تحديث لأحدث الإصدار
يمكنك الآن استخدام @:
بناء الجملة لمزيد من القراءة
<script type="text/javascript">
var jqGridIdList = "@Url.Action("getidlist", "office", new { area = "reports" })";
var availableIds = [];
@for(var i = 0; i < Model.Data.Count (); i++) {
@:availableIds.push({ value : "@Model.Data.ElementAt(i).Text", label : "@Model.Data.ElementAt(i).Text" });
}
</script>