تبلیغات :
ماهان سرور
آکوستیک ، فوم شانه تخم مرغی ، پنل صداگیر ، یونولیت
دستگاه جوجه کشی حرفه ای
فروش آنلاین لباس کودک
خرید فالوور ایرانی
خرید فالوور اینستاگرام
خرید ممبر تلگرام

[ + افزودن آگهی متنی جدید ]




نمايش نتايج 1 به 3 از 3

نام تاپيک: درک سینتکس Razor

  1. #1
    آخر فروم باز
    تاريخ عضويت
    Jul 2009
    پست ها
    6,351

    پيش فرض درک سینتکس Razor

    سلام،
    ما در قوانین razor میگیم که:
    میتوان یک بلاک کد را با محصور کردن آن میان @} و{ نوشت:
    مثل:

    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    سوال اینجاست. وقتی کل کد را در یک بلاک محصور کردیم و با @ میگیم اینها همخپه کد سی شارپ هستند و HTML نیست. پس چرا در این خط @ را نمی زاریم

    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    اما در خط بعدی باز نیاز هست که @ بزاریم؟ مگر اینجا همه کد سی شارپ در نظر گرفته نمیشه؟
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

  2. #2
    ناظر انجمن .NET Framework _H2_'s Avatar
    تاريخ عضويت
    Feb 2007
    محل سكونت
    یک جایی بین Framework و نارمک!
    پست ها
    4,746

    پيش فرض کامپایل Razor

    سلام
    سوالات خاصی مطرح میکنید که در نوع خود جالب و فهم آن بطور قطع مهم است.
    فقط مشکل آن است که پاسخ دادن شان دقت ، ارائه مثال و وقت زیادی می طلبد تا مطلب به درستی منتقل شود و مشکل را بدتر نکنیم.
    ولی باور بفرمائید ترجیح میدهم این سوالات را پاسخ دهم تا سوالات ... !

    شما مجموعه ای از علائم را مطرح کردید، گمانم اگر بدانید کدهای فوق به چه شکل نهایی کامپایل خواهند شد، مسئله از بن حل خواهد شد.

    در razor مجموعه ای از علائم تاثیر گذار در روند کامپایل داریم...
    اول یکسری کلمات کلیدی مانند model@ یا helper@ یا inherits@ و...
    و بعد هم یکسری علامت مانند @ و (...)@ و :@ و {...}@ و <text></text> و...
    و یکسری خلاصه نویسی که فعلاً بماند.

    تمام کار شما در کدهای razor که بظاهر تلفیق html و csharp (یا vb) هستند در باطن و پس از کامپایل به یک کلاس عادی و خالص csharp که وراثتی از System.Web.Mvc.WebViewPage است کامپایل (هرچه تلاش کردم نتوانستم بنویسم، "تبدیل" !) میشود.
    پس گرچه razor, html, csharp, vb مینویسید ولی باید بدانید که در حال نوشتن یک class هستید و باز تعریف (override) فقط یک متد هستید.

    - این کلاسی عمومی با نام فایلش و وراثت inherits@ و آرگومان جنریکی model@ و توابع کمکی helper@ خواهد بود.

    - نماد {...}@ موجب درج مستقیم کدهای برنامه نویسی در کلاس خواهد شد.

    - نماد :@ و <text></text> موجب یک عملیات Write مستقیم متن در استریم خروجی خواهد شد.

    - نماد (...)@ و @ موجب اجرا شدن دستورات و Write نتیجه پس از HtmlEncode در استریم خروجی خواهد شد.

    - نماد @ بطور هوشمند و بسته به محل استفاده، (فاقد خروجی مستقیم و برای کلمات کلیدی مانند for using و...) موجب درج یک بلاک کد در کدها میشود.

    اجازه دهید مطلب را با ذکر چند مثال تعقیب کنیم:

    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    بعنوان نمونه الآن باید متوجه شوید چرا نمیتوانید تابعی که void برمیگرداند را با یک @ اجرا کنید.
    چرا کد this.Html.RenderPartial@ غلط است و گیومه میخواهد ولی this.Html.Partial@ کار میکند و گیومه هم نمیخواهد!؟؟؟

    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    این مقدمه بود (و شاید هم همه آنکه باید بدانید)، علی الحساب داشته باشید، الآن کمی دیروقت است، در فرصتی دیگر سوالتان را مرور و در صورت نیاز پاسخ تکمیلی به بندهای مطوحه را خواهم دارد.
    کلید تمام سوالات تان، درک چگونگی دید کامپایلر razor است. (قرار دادن خود جای کامپایلر)
    شب خوش.

  3. 2 کاربر از _H2_ بخاطر این مطلب مفید تشکر کرده اند


  4. #3
    ناظر انجمن .NET Framework _H2_'s Avatar
    تاريخ عضويت
    Feb 2007
    محل سكونت
    یک جایی بین Framework و نارمک!
    پست ها
    4,746

    پيش فرض

    سلام مجدد
    وقتی کل کد را در یک بلاک محصور کردیم و با @ میگیم اینها همخپه کد سی شارپ هستند و HTML نیست. پس چرا در این خط @ را نمی زاریم ... اما در خط بعدی باز نیاز هست که @ بزاریم؟ مگر اینجا همه کد سی شارپ در نظر گرفته نمیشه؟
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    سوال این است که ، کدشما در خط Line2 دستورات csharp است و Model.Category در خط Line4 هم کد csharp است، پس چرا فقط دومی @ میخواهد؟
    جواب روشن است!
    - چون ...)if قرار نیست در خروجی چاپ شود.
    - چون ...)if باید مستقیم درکدها درج شود و نیازی به Write ندارد.
    - چون Model.Category خط چهارم نیاز به تابع Write دارد تا نتیجه آن در خروجی ظاهر شود.
    - ضمن اینکه در مورد کدهای خاص شما در اینجا، کامپایلر razor نیاز دارد به نحوی متوجه شود :@ که فرمان شروع آن را برای عبارت " :Category" داده اید، کجا تمام میشود.

    برای :@ خط چهارم هم که شما نپرسیدید، کامپایلر razor نیاز دارد بداند که عبارت " :Category" باید عیناً (WriteLiteral) در خروجی ریخته شود.
    برای متوجه شدن این مطلب هم :@ یا <text> یا یک تگ html مانند خط 9 لازم است.

    جهت درک بیشتر، کد کامپایل شده شما چیزی شبیه این خواهد بود:
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    موفق باشید.

  5. این کاربر از _H2_ بخاطر این مطلب مفید تشکر کرده است


Thread Information

Users Browsing this Thread

هم اکنون 1 کاربر در حال مشاهده این تاپیک میباشد. (0 کاربر عضو شده و 1 مهمان)

User Tag List

قوانين ايجاد تاپيک در انجمن

  • شما نمی توانید تاپیک ایحاد کنید
  • شما نمی توانید پاسخی ارسال کنید
  • شما نمی توانید فایل پیوست کنید
  • شما نمی توانید پاسخ خود را ویرایش کنید
  •