3

画像をアップロードするためのフォームを作成しようとしています。RegularExpressionValidator選択したファイルの拡張子を確認するために を配置しました。それValidationExpressionは:

(?i:^.+(.jpg|.ttf|.png|.gif)$)

しかし、たとえば.exeファイルを選択すると。ページはポストバックを実行し、エラーを表示します。そして、.exe ファイルは本来あるべき場所に保存されません。

コントロールの HTML コードは次のとおりです。

<%@ Page Title="" Language="C#" MasterPageFile="~/filippo_admin_page/admin_master.Master" AutoEventWireup="true" CodeBehind="a_gallery.aspx.cs" Inherits="photography.filippo_admin_page.a_gallery" %>
    <asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">
        <link rel="Stylesheet" type="text/css" href="css/a_gallery.css" />
    </asp:Content>
    <asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
        <div id="whole_wrapper">
            <fieldset>
                <legend>Insert new image:</legend>
                <div id="controls_wrapper">        
                    <ul>
                        <li>
                            <asp:Label AssociatedControlID="title_txt" runat="server" ID="title_lbl">Title:</asp:Label>
                            <asp:TextBox ID="title_txt" runat="server" placeholder="Image title"></asp:TextBox>
                            <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" 
                                ControlToValidate="title_txt" ErrorMessage="RequiredFieldValidator" 
                                ForeColor="Red" ValidationGroup="gallery_validation">Required!</asp:RequiredFieldValidator>
                        </li>
                        <li>
                            <asp:Label AssociatedControlID="desc_txt" runat="server" ID="desc_lbl">Description:</asp:Label>
                            <asp:TextBox ID="desc_txt" runat="server" placeholder="Image description" TextMode="MultiLine"></asp:TextBox>
                        </li>
                        <li>
                            <asp:Label AssociatedControlID="cat_txt" runat="server" ID="cat_lbl">Category:</asp:Label>
                            <asp:TextBox ID="cat_txt" runat="server" placeholder="Image category"></asp:TextBox>
                            <asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server" 
                                ControlToValidate="cat_txt" ErrorMessage="RequiredFieldValidator" 
                                ForeColor="Red" ValidationGroup="gallery_validation">Required!</asp:RequiredFieldValidator>
                        </li>
                        <li>
                            <asp:Label ID="upload_lbl" runat="server">Select Image:</asp:Label>
                            <asp:FileUpload ID="upload_pnl" runat="server" />
                            <asp:RequiredFieldValidator ID="RequiredFieldValidator3" runat="server" 
                                ControlToValidate="upload_pnl" ErrorMessage="RequiredFieldValidator" 
                                ForeColor="Red" ValidationGroup="gallery_validation">Required!</asp:RequiredFieldValidator>
                            <asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server" 
                                ControlToValidate="upload_pnl" ErrorMessage="RegularExpressionValidator" 
                                ForeColor="Red" ValidationExpression="(?i:^.+(.jpg|.ttf|.png|.gif)$)" 
                                ValidationGroup="gallery_validation">File must be an image.</asp:RegularExpressionValidator>
                        </li>

                        <li>
                            <asp:Button ID="clear" runat="server" Text="Clear" UseSubmitBehavior="False" />
                            <asp:Button ID="submit" runat="server" Text="Upload"  onclick="submit_Click" 
                                ValidationGroup="gallery_validation"/>                        
                        </li>
                    </ul>
                </div>
                <asp:Label ID="msg_lbl" Visible="false" runat="server"></asp:Label>
            </fieldset>

        </div>    
    </asp:Content>

バリデーターの一部は次のとおりです。

<li>
    <asp:Label ID="upload_lbl" runat="server">Select Image:</asp:Label>
    <asp:FileUpload ID="upload_pnl" runat="server" />
    <asp:RequiredFieldValidator ID="RequiredFieldValidator3" runat="server" 
        ControlToValidate="upload_pnl" ErrorMessage="RequiredFieldValidator" 
        ForeColor="Red" ValidationGroup="gallery_validation">Required!</asp:RequiredFieldValidator>
    <asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server" 
        ControlToValidate="upload_pnl" ErrorMessage="RegularExpressionValidator" 
        ForeColor="Red" ValidationExpression="(?i:^.+(.jpg|.ttf|.png|.gif)$)" 
        ValidationGroup="gallery_validation">File must be an image.</asp:RegularExpressionValidator>
</li>

私はValidationGroup等号を持っており、ボタンgallery_validation自体を含め、検証したいすべてのコントロールに設定されています。submit

ファイルの HTML コード全体が必要な場合は、質問してください。

4

2 に答える 2

2

正規表現が無効です。クライアントで適切に処理できません。同じ正規表現を使用すると、IE9 でエラーが表示されます。標準の正規表現に切り替えると、すべてが正常に機能します。したがって、正規表現を変更する必要があります。まもなくここに投稿します。

ここで問題となるのは、.NET Framework の一部である - ?i: です。したがって、クライアント側では機能しません。詳細については、

正規表現バリデーターで大文字と小文字を区別しないようにしますか?

このリンクには、問題の解決策も含まれています。

于 2013-01-08T20:05:24.720 に答える
1

EnableClientScript="true"を使用してクライアントスクリプトを有効にする必要があります

<asp:RegularExpressionValidator EnableClientScript="true"
ID="RegularExpressionValidator1" runat="server" 
    ControlToValidate="upload_pnl" ErrorMessage="RegularExpressionValidator" 
    ForeColor="Red" ValidationExpression="(?i:^.+(.jpg|.ttf|.png|.gif)$)" 
    ValidationGroup="gallery_validation">File must be an image.</asp:RegularExpressionValidator>

また、ご注意ください

正規表現の検証の実装は、クライアントとサーバーでわずかに異なります。クライアントでは、JScript正規表現構文が使用されます。サーバーでは、System.Text.RegularExpressions.Regex構文が使用されます。JScript正規表現構文はSystem.Text.RegularExpressions.Regex構文のサブセットであるため、クライアントとサーバーの両方で同じ結果を得るには、JScript正規表現構文を使用することをお勧めします。

正規表現はJavascriptでは無効です。あなたはそれを変えなければなりません。

于 2013-01-08T19:45:31.930 に答える