Aspnetcore: خطأ في الإنشاء عندما يكون للمعلمة والمكون التابع نفس الاسم

تم إنشاؤها على ٧ نوفمبر ٢٠١٨  ·  3تعليقات  ·  مصدر: dotnet/aspnetcore

أضف دعمًا لـ @tagHelperPrefix

مشكلة

لا يدعم التطبيق الحالي لـ Blazor v0.6.0 لـ Razor @tagHelperPrefix

التأثير الوظيفي

محاولة تضمين مكون فرعي داخل جزء الفرعي و

الحد الأدنى من خطوات repro

لنفترض أن لدينا مكونًا في Panel.cshtml النحو التالي:

<div class="panel panel-default">
  <div class="panel-heading">@PanelHeader</div>
  <div class="panel-body">@PanelBody</div>
</div>

@functions{
  [Parameter] private RenderFragment PanelHeader { get; set; }
  [Parameter] private RenderFragment PanelBody { get; set; }
}

ومكون آخر في PanelHeader.cshtml مثل هذا:

<div>@Title</div>
<div>@SubTitle</div>

@functions{
  [Parameter] private string Title { get; set; }
  [Parameter] private string SubTitle { get; set; }
}

ثم استخدام هذين المكونين في صفحة مثل الكود أدناه سيؤدي إلى خطأ وقت الترجمة:

<Panel>
  <PanelHeader>
       <PanelHeader Title="some title" SubTitle="sub title"></PanelHeader>
  </PanelHeader>
  <PanelBody>Some content ...</PanelBody>
<Panel>

عرض

أوصي بإضافة دعم لـ @tagHelperPrefix لتبسيط تمييز المكونات عن RenderFragments.

يمكن بعد ذلك إعادة كتابة الكود أعلاه على النحو التالي:

Panel.cshtml هكذا:

<strong i="32">@tagHelperPrefix</strong> "pre1:"
<div class="panel panel-default">
  <div  class="panel-heading">@PanelHeader</div>
  <div  class="panel-body">@PanelBody</div>
</div>

@functions{
  [Parameter] private RenderFragment PanelHeader { get; set; }
  [Parameter] private RenderFragment PanelBody { get; set; }
}

وسيبدو PanelHeader.cshtml هكذا:

<strong i="37">@tagHelperPrefix</strong> "pre2:"
<div>@Title</div>
<div>@SubTitle</div>

@functions{
  [Parameter] private string Title { get; set; }
  [Parameter] private string SubTitle { get; set; }
}

وأخيرًا ، يمكن استخدام كل من المكونين الطفل والوالد على النحو التالي:

<pre1:Panel>
  <PanelHeader>
       <pre2:PanelHeader Title="some title" SubTitle="sub title"></pre2:PanelHeader>
  </PanelHeader>
  <PanelBody>Some content ...</PanelBody>
<pre1:Panel>
area-blazor bug

ال 3 كومينتر

شكرا على هذا الاقتراح!

لا نخطط لإضافة دعم لـ @tagHelperPrefix لأن القصد من المكونات والمعلمات أن تتبع نفس قواعد دقة الاسم مثل أنواع وخصائص .NET. على سبيل المثال ، إذا كنت تريد أن تؤهل مساحة الاسم لاسم مكون ، يمكنك ببساطة تحديد مساحة الاسم بالإضافة إلى اسم النوع: <Namespace.MyComponent /> . لم يتم تنفيذ هذا بعد ، ولكن يتم تتبعه بواسطة https://github.com/aspnet/Blazor/issues/1315.

ومع ذلك ، يجب أن يعمل السيناريو الخاص بك اليوم كما هو ، وحقيقة أنه لا أعتقد أنه خطأ. إنه مكافئ لامتلاك خاصية وكتابة بنفس الاسم ، وهو أمر يجب أن يكون جيدًا.

سيكون هذا رائعًا ولكن في نفس الوقت سيكون وقتًا طويلاً جدًا للكتابة في جميع مساحات الأسماء. ربما ، عند التنفيذ ، يمكنك إضافة ميزة لتقديم شيء مثل using كشف في C #

fayezmm Yup ، الخبر السار هو أن Razor لديها بالفعل توجيه @using لذلك.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات