2013-01-08 39 views
2

我正在嘗試製作上傳圖片的表單。我已經放置了一個RegularExpressionValidator來檢查選定文件的擴展名。 其ValidationExpression是:ASP.net RegularExpressionValidator即使輸入無效也允許回發

(?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代碼只是問。

+1

請發佈aspx標記 – platon

+0

@platon ok。謝謝 –

回答

2

你的正則表達式是無效的,它不能在客戶端上正確處理。當我使用相同的正則表達式時,我的IE9顯示錯誤。如果我將它切換到標準的正則表達式,一切正常。所以,有必要改變正則表達式。我會很快在這裏發佈。

這裏有問題的部分是??i:它是.NET Framework的一部分。所以,它在客戶端不起作用。有關詳細信息,請參閱

make regular expression validator case insensitive?

此鏈接還包含一個解決問題的辦法。

+0

好吧,等待。謝謝。 –

+0

@RafaelAdel,我已經更新了答案... – platon

+0

我在CustomValidator方面遇到了很大的麻煩,創建單獨的JavaScript和服務器端驗證看起來太笨拙了。與@platon關聯的答案建議將正則表達式改爲固有地不區分大小寫,例如, '^ +。([JJ] [PP [gG的] |。。[TT] [TT] [FF] |。[PP] [NN] [gG的] | [gG的] [II] [FF])$' 。這似乎是最簡單的路線。 – mac9416

1

您必須啓用與EnableClientScript客戶端腳本=「真」

<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中無效。你必須改變它。

+2

EnableClientScript屬性的默認值爲true。所以,它不應該被聲明。 – platon

+0

是的,這是真的! – Cybermaxs

+0

是的,它默認啓用。 –

相關問題