2

次のコードビハインドがあります。

protected string VcdControlPanelLink { get; set; }

protected void Page_Load(object sender, EventArgs e) {
    VcdControlPanelLink = "http://www.mywebsite.com";
}

そして、次のマークアップ:

<a href='<%# Eval(VcdControlPanelLink) %>' target="_blank" title="View the VDC control panel">VDC control panel</a>

しかし、ページを実行すると、href タグは空の文字列としてレンダリングされます。

<a title="View the VDC control panel" target="_blank" href="">VDC control panel</a>

マークアップなどのさまざまな組み合わせを試しましたが、うまくいきません。私は何が欠けていますか?

4

2 に答える 2

4

テンプレート (例: GridView の) でデータ バインディング式 を使用する場合、データ バインディングは自動的に呼び出されます。ただし、テンプレートの外部でそのような式を使用する場合は、次のように呼び出してデータバインディングを呼び出す必要があります(またはあなたの場合):<%# ... %>ItemTemplateControl.DataBind()this.DataBind()

protected string VcdControlPanelLink { get; set; }

protected void Page_Load(object sender, EventArgs e) {
    VcdControlPanelLink = "http://www.mywebsite.com";
    this.DataBind();
}

<!-- Note that you do *not* use Eval here! -->
<a href='<%# VcdControlPanelLink %>' target="_blank" ... />

ただし、ここではデータ バインディングが適切なツールではないと思います。(Web コントロールの代わりに) 基本的な HTML 要素を使用しているため、インライン ASP.NET 式を使用できます (必須ではありませthis.DataBind()ん)。

<a href='<%= VcdControlPanelLink %>' target="_blank" ... />

いずれにせよ、リンクに引用符が含まれていないことを確認してください。そうしない'と、HTML インジェクションが発生する可能性があります。値がユーザーによって提供された場合は、 HtmlEncodeとサニタイズを忘れないでください。

于 2012-12-19T09:30:15.023 に答える
1

プロパティを公開して、次のようにアクセスします。

public string VcdControlPanelLink { get; set; }

<a href='<%= VcdControlPanelLink %>' target="_blank" title="View the VDC control panel">VDC control panel</a>
于 2012-12-19T09:31:48.557 に答える