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>

我有ValidationGroupequalsgallery_validation并且设置在我想要验证的所有控件上,包括submit它自己的按钮。

如果您想要文件的整个 HTML 代码,请询问。

4

2 回答 2

2

您的正则表达式无效,无法在客户端正确处理。当我使用相同的正则表达式时,我的 IE9 显示错误。如果我将其切换为标准正则表达式,一切正常。因此,有必要更改正则表达式。我很快就会在这里发布。

这里有问题的部分是 - ?i:它是 .NET Framework 的一部分。因此,它在客户端不起作用。更多详情,请参阅

使正则表达式验证器不区分大小写?

此链接还包含问题的解决方案。

于 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 回答