كيفية استخدام علامات الاقتباس المفردة في سلسلة تنسيق Eval

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

سؤال

لقد حصلت على مكرر وSqlDatasource الخاص به متداخل داخل Gridview TemplatedField.
يتم تعيين SelectCommand مصدر بيانات المكرر باستخدام FormatString للتقييم من Gridview.
يحتوي SelectCommand على جملة WHERE لمقارنة سلسلة.
لأنني استخدمت بالفعل علامات الاقتباس المفردة والمزدوجة، أواجه مشكلة في تحديد السلسلة في جملة SQL WHERE.

كيف أقوم بإضافة علامات الاقتباس المفردة داخل سلسلة Eval FormatString؟

لقد حاولت استخدام "يستبدل'.
لقد حاولت استخدام "شخصيات خاصة"(...حيث StringField = '{0}' ...)

لا حظ حتى الآن.وأنا أقدر أي مساعدة قد تكون قادرا على تقديمها.

<asp:GridView ID="GridView1" runat="server" DataSourceID="DataSource1" DataKeyNames="Foo" AutoGenerateColumns="False" AllowSorting="true" >
    <Columns>
        <asp:BoundField DataField="Foo" HeaderText="Foo" SortExpression="Foo" />
        <asp:BoundField DataField="Bar" HeaderText="Bar" SortExpression="Bar" />
        <asp:TemplateField>
            <ItemTemplate>
                <asp:Repeater ID="Repeater1" runat="server" DataSourceID="DataSourceNested">
                    <ItemTemplate>
                        <asp:Label ID="Label1" runat="server" Text='<%# Eval("Blah") %>'></asp:Label>
                    </ItemTemplate>
                </asp:Repeater>
                <asp:SqlDataSource ID="DataSourceNested" runat="server" DataFile="~/App_Data/DatabaseName"
                    SelectCommand='<%# Eval("Bar", "SELECT Blah FROM TableName WHERE (StringField = {0})") %>' >
                </asp:SqlDataSource>
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>
هل كانت مفيدة؟

المحلول

لا تنس أن صفحة .aspx هي ببساطة XML.أنت فقط تفلت من الاقتباسات كما تفعل عادةً.

على سبيل المثال:

<asp:Repeater ID="repeatTheLabel" runat="server">
    <ItemTemplate>
        <asp:Label ID="Label1" Text="<%# Eval(&quot;Id&quot;, &quot;This is item '{0}'.&quot;) %>" runat="server" />
    </ItemTemplate>
    <SeparatorTemplate>
        <br />
    </SeparatorTemplate>
</asp:Repeater>

عندما يكون التعبير أعلاه مرتبطًا ببيانات، تكون القيمة بين <%# و %> يصبح:

Eval("Id", "This is item '{0}'.")

...الذي ينتج على صفحة HTML كمخرجات عند ربط البيانات بمصفوفة من الكائنات ذات قيم خاصية "المعرف" من 1 إلى 5:

هذا هو العنصر "1".
هذا هو العنصر "2".
هذا هو العنصر "3".
هذا هو العنصر "4".
هذا هو العنصر "5".

نصائح أخرى

قم بتخزين استعلامات SQL الخاصة بك في الخصائص الموجودة في فئة صفحتك.فهو لا يعمل فقط :-) ولكنه يجعل قراءة التعليمات البرمجية الخاصة بك وصيانتها أسهل.

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

لماذا لا تحدد جملة WHERE هذه باعتبارها ثابتًا في التعليمات البرمجية الخلفية الخاصة بك.يُعرِّف:

protected const string SELECTCLAUSE = 
"SELECT Blah FROM TableName WHERE (StringField = '{0}')";

ثم ستكون الخاصية SelectCommand الخاصة بك:

SelectCommand='<%# Eval("Bar", SELECTCLAUSE ) %>'

هل حاولت الهروب من أحرف الاقتباس المفردة؟

... WHERE (StringField = \'{0}\') ...
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top