簡體   English   中英

ASP.NET 和 C# 文件上傳

[英]ASP.NET and C# FileUpload

I have a asp file upload for pictures and what I want to do is, when the file chosen has the same name as the previous file it should pop something up that says "This image name already exists, do you want to replace it? if是的,那么它只會用新的圖片覆蓋當前圖片,但如果不是,那就別管它了。我該怎么做?現在我有這個。另外,如果解決方案在 javascript 中,我也可以使用它(但我我不太喜歡 javascript :) ) 謝謝

<div class="style">
Choose an Image:&nbsp;<asp:FileUpload ID="getImage" runat="server" Width="150px" BorderStyle="Inset" EnableViewState="true" />
 <asp:RegularExpressionValidator ID="RegularExpressionValidator"
runat="server" ControlToValidate="getImage" CssClass="Error" Display="dynamic" ValidationExpression=".*(\.[Jj][Pp][Gg]|\.[Gg][Ii][Ff]|\.[Jj][Pp][Ee][Gg]|\.[Pp][Nn][Gg])" ErrorMessage="Select a correct file format"></asp:RegularExpressionValidator>
</div>

請注意,我是 Javascript 的新手,所以如果這行得通,請像我 5 歲一樣解釋。

我真的很感激幫助。

將下面的代碼添加到您的提交按鈕

OnClientClick="return confirm('Are you sure you want to delete this file?')"

正如有人指出的那樣進行編輯,這將在不考慮以前的文件和新文件的情況下提出這個問題。 它將完成基本工作。

我的問題是你是在編輯模式還是在新項目模式下這樣做。 我的意思是您是在編輯項目還是在您有興趣檢查的頁面上添加新項目?

我的解決方案將在回發之前執行檢查。 我也用了一點jquery。

這里的難題的重要部分是檢索以前的文件名。 我創建了一個 PageMethod 來完成這部分工作。 所以在我的 aspx.cs 文件中,我有一個看起來像這樣的 function:

using System.Web.Services;

.......

[WebMethod()]
public static string GetPreviousFileName()
{
    //put logic here to get the filename to compare against.
    return "somefilename.ext";
}

您需要實現自己的邏輯來檢索文件名。 另一種更簡單但不太靈活的處理前一個文件名的方法是在頁面中添加一個 asp:hiddenfield 並在頁面加載時使用前一個文件的名稱填充它。 然后您可以通過閱讀$('#<%= hiddenField.ClientID %>').val()進行比較。

接下來,我將以下代碼用於文件上傳控件和提交按鈕:

<asp:ScriptManager ID="sm" runat="server" EnablePageMethods="true" />
<div>
    <asp:FileUpload ID="fu" runat="server" />
    <asp:Button ID="btnUpload" runat="server" OnClientClick="return checkDuplicateFile();" Text="Upload File" />
</div>

這里需要注意兩件重要的事情:ScriptManager 具有EnablePageMethods="true"並且 asp:button 具有指定的 OnClientClick 屬性。 最后,解決方案的 javascript 部分從頁面方法檢索值並比較文件名:

<script src="Scripts/jquery-1.4.1.min.js" type="text/javascript"></script>
<script type="text/javascript">
    var oFilename = "";

    $(function () {
        //get original file name on page load
        PageMethods.GetPreviousFileName(function (result) {
            oFilename = result;
        });
    });

    function checkDuplicateFile() {
        var newVal = $('#<%=fu.ClientID %>').val();
        var newValFile = newVal.substr(newVal.lastIndexOf("\\") + 1);

        //returning true causes postback, returning false stops postback.
        if (newValFile == oFilename) { return confirm("This image name already exists, do you want to replace it?"); }
        else return true;
    }
</script>

這里發生了幾件事。 我們使用 pagemethod 從頁面加載時的 page 方法中提取舊文件名( PageMethods.GetPreviousFileName )。 接下來我們設置 function 將由我們的按鈕 onClick 事件(客戶端)調用。 <%=fu.ClientID %>代碼片段將 output 文件上傳控件的客戶端 ID 用於我們的 javascript。 我在文件路徑上執行 substring 並通過僅拉回最后一個“\”之后的文本來提取文件名並進行比較。

正如我在 function 中的評論所說,從 OnClientclick 事件中調用的 function 返回 true/false 確定是否發生回發。 因此,如果用戶在確認框中單擊“是”,則會發生回發,否則如果他們單擊“否”,則不會發生。

希望至少能讓你朝着正確的方向前進。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM