سؤال

تحديث كانت القضية مشكلة بناء الجملة. يعرض Awrigley الطريقة الصحيحة لكتابة هذا في Razor.

الأعمال التالية:

@if(Model.Thing.Prop != null)
{
    Html.RenderPartial("SomePartialView", Model.Thing.Prop);
}

لديك شرط لإظهار التفاصيل لأعلى 1 Foo لاجل منحه Bar كجدول HTML. كيف تخفي الجدول الفارغ أو إظهار رسالة "لا شيء" إذا كان ذلك Foo باطل؟

فمثلا. أنا أحصل على NullReferenceException على السطر التالي بسبب Model.Thing.Prop هو null;

@{Html.RenderPartial("SomePartialView", Model.Thing.Prop);} 

إنه فارغ عن قصد ، يعود مستودعي الفارغ بدلاً من فارغة Foo. ولكن هذا هو معتدل إلى جانب النقطة ، وهو ما يعطى فارغا Model.Thing.Prop, ، لا أريد الاتصال Html.RenderPartial.

تحديث
لقد جربت ما يلي بدون حظ:

@if(Model.Thing.Prop != null)
{
    @{Html.RenderPartial("SomePartialView", Model.Thing.Prop);}
}

مما يؤدي إلى إخباري في الاستوديو البصري بأنه يتوقع ; في السطر 1 ، العمود 1 وكذلك ذلك ; هو تعبير غير صالح في السطر 1 ، العمود 1 (أعتقد أن هذا يرجع إلى حالة ما قبل الإصدار من MVC3) ، وإذا وصلت إلى الصفحة في متصفح أحصل عليه

CS1501: لا يوجد تحميل زائد للطريقة "الكتابة" يأخذ 0 وسيطات

مع ال @Html.RenderPartial خط تسليط الضوء.

لقد حاولت أيضا

@if(Model.Thing.Prop != null)
{
    <text>
    @{Html.RenderPartial("SomePartialView", Model.Thing.Prop);}
    </text>
}

لكن هذا ينتج عنه NullReferenceException من داخل وجهة نظري الجزئية ، والتي لا تبدو صحيحة. Model.Thing بالتأكيد صالح Bar و Model.Thing.Prop هو بالتأكيد أ null Foo.

هل كانت مفيدة؟

المحلول

أفترض أنك لا تريد استخدام ...

@if (Model.Thing.Prop != null)
{Html.RenderPartial("SomePartialView", Model.Thing.Prop);} 

... لأنك لا تزال ترغب في تقديم جزء من العرض الجزئي؟

أوه ، لا. لقد قرأت رسالتك بشكل صحيح.

ليس لدي أي فكرة لماذا لا يعمل الرمز أعلاه من أجلك.

تعديل:

تذكر أنه في الحلاقة ، يمكن استخدام @ طريقتين:

  1. لتنفيذ البيانات:

    @{ بياني؛ }

  2. لتقييم htmlhelper ، طريقة فئة أو خاصية أو متغير يرجع سلسلة من شكل أو آخر (على سبيل المثال ، htmlstring ، mvchtmlstring أو سلسلة). فمثلا:

    @myClass.MyStringProperty

لاحظ أنه في الحالة 2 ، لا يلزم إنهاء نصف القولون.

تشير 1 و 2 إلى أنه إذا كان لديك htmlhelper يرجع شيئًا آخر غير سلسلة (على سبيل المثال ، باطلة) ، فعليك أن تسميها على النحو التالي:

@{Html.MyHelperThatReturnsVoid;}

بينما مع htmlhelper الذي يرجع سلسلة أو htmlstring أو mvchtmlstring ، يمكنك ببساطة الكتابة:

@Html.MyHelperThatReturnsAString

لمزيد من التفاصيل ، انظر إجابة مقبولة لسؤال طرحته:

HTMLHelper مخصص الذي يعيد مشكلة الفراغ


نصائح أخرى

هذا إما تغيير في MVC3 أو شيء غريب.

سلوك MVC2:
إذا كان النموذج.
في حالة وجود نموذج. عندما تمرر مرجعًا فارغًا إلى النموذج ، يتم تمرير النموذج الأصل (النموذج هنا) كنموذج إلى "SomePartialView" الذي يتوقع دعامة النوع (ما لم تكن النموذج والدعامة نفس النوع).

بالنظر إلى أنك تحصل على Null Ref ، سأفترض أن هذا النموذج. في هذه الحالة ، سيكون الحل الوحيد الخاص بك عبارة عن بيان ef. تمرير Null إلى نموذج المرجع ببساطة لا يعمل وقد مزقت بعض الشعر على السلوك.

مرة أخرى ، هذا هو سلوك MVC2 ، إذا كان هذا قد تغير بالنسبة لـ MVC3 حيث يمكنك بصراحة تمرير نموذج فارغ ، رائع!

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top