Eval Format Stringで単一引用符を使用する方法
-
06-07-2019 - |
質問
リピーターとそのSqlDatasourceがGridview TemplatedField内にネストされています。
リピーターのデータソースSelectCommandは、GridviewのEvalのFormatStringを使用して設定されます。
SelectCommandには、文字列を比較するためのWHERE句があります。
すでに一重引用符と二重引用符を使用しているため、SQL WHERE句の文字列の区切りに問題があります。
Eval FormatString内に単一引用符を追加するにはどうすればよいですか
「 Replace 」を使用してみました。
'特殊文字'(... WHERE 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("Id", "This is item '{0}'.") %>" runat="server" />
</ItemTemplate>
<SeparatorTemplate>
<br />
</SeparatorTemplate>
</asp:Repeater>
上記の式がデータバインドされると、<%#
と%>
の間の値は次のようになります。
Eval("Id", "This is item '{0}'.")
...これは、<!> quot; Id <!> quot;のオブジェクトの配列でデータバインドされたときに、出力としてHTMLページに生成されます。 1〜5のプロパティ値:
これはアイテム「1」です。
これはアイテム「2」です。
これはアイテム「3」です。
これはアイテム「4」です。
これはアイテム「5」です。
他のヒント
ページクラスのプロパティにSQLクエリを保存します。動作するだけでなく:-)だけでなく、コードの読み取りと保守が容易になります。
ああ、文字列の置換を行う代わりにクエリでパラメータを使用する必要があります。これにより、単一引用符が不要になり、問題が解決します。
このWHERE句を分離コードのconstとして定義しないのはなぜですか。定義:
protected const string SELECTCLAUSE =
"SELECT Blah FROM TableName WHERE (StringField = '{0}')";
その後、SelectCommandプロパティは次のようになります。
SelectCommand='<%# Eval("Bar", SELECTCLAUSE ) %>'
一重引用符をエスケープしようとしましたか?
... WHERE (StringField = \'{0}\') ...