4

このような一般的な質問を投稿するのは好きではありませんが、このトピックについてはあまり見ていません。そのため、誰かがこのようなことをしたかどうか、そしてこれが適切な実装であるかどうか疑問に思いました。

編集メソッド全体を追加

これがコードです

 protected void gridViewAttachments_HtmlDataCellPrepared(object sender, DevExpress.Web.ASPxGridView.ASPxGridViewTableDataCellEventArgs e)
    {
        //if (e.DataColumn.FieldName == "AttachmentName" && e.CellValue.ToString().ToLower().Contains("://"))
        //    attachmentUrl = e.CellValue.ToString();
        //if (e.DataColumn.FieldName == "AttachmentName" && !e.CellValue.ToString().ToLower().Contains("://"))
        //    attachmentUrl = "http://" + e.CellValue;
        Uri targetUri;
        if (Uri.TryCreate("http://" + e.CellValue, UriKind.RelativeOrAbsolute, out targetUri))
        {
            attachmentUrl = new Uri("http://" + e.CellValue);
        }

        if (e.DataColumn is DevExpress.Web.ASPxGridView.GridViewDataHyperLinkColumn)
        {
            if (attachmentUrl.ToString() == "")
            {
                DevExpress.Web.ASPxEditors.Internal.HyperLinkDisplayControl hyperlink =
                    (e.Cell.Controls[0] as DevExpress.Web.ASPxEditors.Internal.HyperLinkDisplayControl);
                hyperlink.Target = "_blank";
                hyperlink.NavigateUrl = ApplicationUrl + "/Attachment.ashx?key=" + hyperlink.Text;
                hyperlink.Text = GetWords("GENERAL.VIEW_ATTACHMENT");
            }
            else
            {
                DevExpress.Web.ASPxEditors.Internal.HyperLinkDisplayControl hyperlink = (e.Cell.Controls[0] as DevExpress.Web.ASPxEditors.Internal.HyperLinkDisplayControl);
                hyperlink.Target = "_blank";

                hyperlink.NavigateUrl = attachmentUrl.ToString();
                hyperlink.Text = "Go to URL";
            }
        }
    }

かなり基本的で、機能します。私の質問はこれです:文字列に//が含まれているかどうかをチェックすることは、それがURLであるかどうかをチェックするのに十分ですか?私がチェックしなければならない理由は、それがテーブルからデータをプルしていることであり、テーブルのいくつかのフィールドはファイル名(mydoc.docx)であり、その場合、私はそれらで何か他のことをします。C#で実行できる別のより堅牢なチェックはありますか?

4

1 に答える 1

8

Uri.TryCreate代わりに、URLの作成が成功したかどうかを確認するために使用できます。

Uri targetUri;
if (Uri.TryCreate("http://" + e.CellValue, UriKind.RelativeOrAbsolute, out targetUri))
{
    //success
    attachmentUrl = "http://" + e.CellValue;
}
于 2012-06-04T21:45:59.453 に答える