2009-03-12 11 views
0

私はGridViewに次の列を持っています。私の問題は、URLではなく「ダウンロード」というテキストのみをレンダリングすることです。HyperLinkFieldがリンクとして表示されない

<asp:HyperLinkField DataNavigateUrlFields="ArchiveLocation" Text="Download" DataNavigateUrlFormatString="{0}" /> 

私がグリッドに1行でDataTableをバインドすると、その行のArchiveLocationに値が含まれています

"~/Common/Forms/ExportStream.aspx?path=C:\Development\Chase\Exports\ChaseExport-090312073930.zip".

答えて

1

すべてのレコードに同じURLが必要な場合のみ、NavigateUrlを使用します。

フィールドの値にコロンがある場合のみ、HyperLinkFieldはテキストをレンダリングするように見えます。コロンを削除すると、ハイパーリンクが表示されます。なぜ私はまだ知りません。

どうやら、OnDataBindField方法が考慮されCrossSiteScriptingValidation.IsDangerousUrlを呼び出し、「:」危険なあなたに代わって:

internal static bool IsDangerousUrl(string s) 
{ 
    if (string.IsNullOrEmpty(s)) 
    { 
     return false; 
    } 
    s = s.Trim(); 
    int length = s.Length; 
    if (((((length > 4) && ((s[0] == 'h') || (s[0] == 'H'))) && ((s[1] == 't') || (s[1] == 'T'))) && (((s[2] == 't') || (s[2] == 'T')) && ((s[3] == 'p') || (s[3] == 'P')))) && ((s[4] == ':') || (((length > 5) && ((s[4] == 's') || (s[4] == 'S'))) && (s[5] == ':')))) 
    { 
     return false; 
    } 
    if (s.IndexOf(':') == -1) 
    { 
     return false; 
    } 
    return true; 
} 
0

あなたはtemplateField

を使用しているときにバインドするためにどのようなことを伝える必要があります
<asp:HyperLinkField DataNavigateUrlFields="ArchiveLocation" Text="Download" DataNavigateUrlFormatString="{0}" NavigateUrl='<%#Eval("ArchiveLocation")%>' /> 
+0

:「データバインディング式は唯一のDataBindingイベントを持つオブジェクトでサポートされているがSystem.Web.UI.WebControls.HyperLinkField DataBindingイベントを持っていません。」 – ProfK

0

データバインディングプロセスをデバッグするには、onitemdataboundイベントハンドラを追加し、ブレークポイントを設定してDataItemを調べて、期待通りのものであることを確認しますing。

ハイパーリンクフィールドは行テンプレートにあり、ヘッダーまたはフッターの権利ではありませんか?

2

周りの作業は、テンプレートフィールドを使用することで、その16進表現にコロンを符号化するだろう、 %3Aになります。

<asp:TemplateField> 
    <ItemTemplate> 
     <asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl='<%# Eval("ArchiveLocation","{0}").Replace(":", Server.UrlEncode(":")) %>' Text="Download"></asp:HyperLink> 
    </ItemTemplate> 
</asp:TemplateField> 

クエリ文字列変数コレクションから値を取得すると、自動的にデコードされます。私にエラー与え

string path = Request.QueryString["path"]; 
関連する問題