سؤال

كاختبار ، أقوم بتحويل تطبيق إثبات المفهوم الذي كتبناه من نماذج الويب إلى 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>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top