コードビハインドで完全に実装されたカスタムASP.NETユーザーコントロールがあります。コントロールは、1つの文字列プロパティを持ち、その宣言型のマークアップは次のようになります。ASP.NET usercontrolのdataboundプロパティが引用符なしでしか動作しないのはなぜですか?
<uc:MyControl ImageUrl="/Content/images/" runat="server" />
ほとんどの場合、実際の宣言は、このような構文をデータバインディングを使用します。
<uc:MyControl ImageUrl="<%# PageInfo.ImageUrl %>" runat="server" />
が今ここに私の質問に関連する奇妙な部分があります。上記の構文を使用すると、データバインディングが機能せず、実行時にImageUrlの値が引用符の間にある文字列リテラルになります。ただし、二重引用符を削除すると、期待どおりに動作します。
<uc:MyControl ImageUrl=<%# PageInfo.ImageUrl %> runat="server" />
同じ現象は、二重引用符と一重引用符の両方で発生します。私はこれに困惑していますが、コードが動作していても、値を引用符で囲むことは標準であり、データバインディングの作業を行うためのアプローチは決して正統性がないため、実際には最適ではありません。
誰もが引用符なしでのみ動作する理由についてのアイデアはありますか?
PageInfo.ImageUrlはカスタムコントロールにデータバインドされていますか? – TheGeekYouNeed
PageInfo.ImageUrlは、この例のコントロールのImageUrlプロパティにバインドしている任意のプロパティです。私はそこに他のもの(例えばRequest.QueryString)を使うことができ、振る舞いは同じです。 –
これは試しましたか? ImageUrl = "<%= PageInfo.ImageUrl%>" runat = "server" /> - コードの中でプロパティを設定するのはどうですか? uc:MyControlにIDを与えてください。 – TheGeekYouNeed