يمكنني نفي القيمة في سمة يستخدم "وحدة التقييم"؟

StackOverflow https://stackoverflow.com/questions/611049

  •  03-07-2019
  •  | 
  •  

سؤال

وأود أن وضع الدولة تمكين زر ليكون نفي قيمة.

وهكذا يعطى هذا الرمز:

<asp:CheckBox ID="DefaultChecked" 
              Checked='<%# Bind("IsDefaultMessage") %>' 
              Enabled="false" 
              runat="server" />

<asp:LinkButton ID="MakeDefaultButton" 
                runat="server" 
                CommandName="MakeDefault' 
                CommandArgument='<%# Bind("ResidentialInfoID") %>' 
                Text="Make Default" />

وكيف يمكنني جعل Enabled LinkButton false السمة إذا IsDefaultMessage == true؟

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

المحلول

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

عند استخدام ربط، فإن الصفحة جمعت بالفعل قد ولدت التعليمات البرمجية التي تستخدم وحدة التقييم لتعيين قيمة، بالإضافة إلى بعض التعليمات البرمجية لقراءة قيمة الادخار. لأن يتم استبدال ربط مع الشفرة التي تم إنشاؤها، لا يمكنك استخدام أي منطق إضافية مع ربط.

<asp:CheckBox ID="DefaultChecked" Checked='<%# !(bool)Eval("IsDefaultMessage") %>' Enabled="false" runat="server" />
<asp:LinkButton ID="MakeDefaultButton" runat="server" CommandName="MakeDefault' CommandArgument='<%#Bind("ResidentialInfoID") %>' Text="Make Default"/>

نصائح أخرى

إذا يمكنك استخدام وحدة التقييم، انها مجرد وسيلة للطبقة Control. انه امر خاص فقط لأنه يجب أن يكون في سياق ربط البيانات كتلة <%# ... %>. بخلاف ذلك، يمكنك علاج في الأساس كتلة مثل كتلة التعبير <%= %> العادي:

<%# !(bool)Eval("IsDefaultMessage") %>

إذا كنت تريد أن تزال ربط ذلك (وحدة التقييم ليس ذهابا وإيابا)، مما كنت ستحتاج إلى إبطاله ذهابا وإيابا خلال ربط البيانات. قد لا تحتاج إلى القيام بذلك رغم ذلك، إذا يمكنك فقط إعادة كلمة عنصر التحكم. على سبيل المثال، إذا خانة الاختيار، بدلا من وصفها أنها "ليست افتراضي رسالة" إلى المستخدم ويلغي ذهابا وإيابا، من علامة مميزة هو "هل الافتراضى رسالة". مثال مفتعلة، ولكن تحصل على هذه الفكرة.

ولقد استعملت أبدا ربط لكن ما أفهمه هو أنه يشبه Databinder.Eval. وفي كلتا الحالتين، سواء الأساليب تعود الأشياء لذلك تحتاج إلى ألقها إلى منطقية قبل أن يقيم عليه.

<%# !Convert.ToBoolean(Bind("IsDefaultMessage") %>

وتحرير: يبدو أن هذا لا يمكن أن يتم، وسوف تستخدم SqlDataSource على الصفحة يحل المشكلة. http://forums.asp.net/t/1009497.aspx .

في حالة يتطلع شخص عن خيار مع VB.Net

<asp:CheckBox ID="DefaultChecked" Checked='<%# NOT (Eval("IsDefaultMessage")) %>' Enabled="false" runat="server" />

وعلى ما أذكر (لقد كان الوقت)، وليس هناك سحر خاص في <%#Bind(. انها #Bind( فقط داخل <٪ ....٪>. وهو ما يعني كنت تريد:

 <%  ! #Bind("IsDefaultMessage") %>'

كود

Checked='<%# Eval("IsDefaultMessage").ToString().Length() > 4 %>'

وسيعود صحيح إذا IsDefaultMessage هو زائف منذ "خطأ". طول = 5 و "صحيح". طول = 4

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