ASP.NET和C#文件上载

ASP.NET和C#文件上载,c#,javascript,asp.net,C#,Javascript,Asp.net,我有一个asp文件上传图片,我想做的是,当选择的文件与前一个文件有相同的名称,它应该弹出的东西说“此映像名称已存在,是否要替换它?”?如果是的话,它会用新图片覆盖当前图片,如果不是的话,就别管它。我该怎么做?。现在我有这个。另外,如果解决方案是javascript,我也可以使用它(但我不太擅长javascript:),谢谢 <div class="style"> Choose an Image:&nbsp;<asp:FileUpload ID="getImage" ru

我有一个asp文件上传图片,我想做的是,当选择的文件与前一个文件有相同的名称,它应该弹出的东西说“此映像名称已存在,是否要替换它?”?如果是的话,它会用新图片覆盖当前图片,如果不是的话,就别管它。我该怎么做?。现在我有这个。另外,如果解决方案是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文件中,我有一个如下所示的函数:

using System.Web.Services;

.......

[WebMethod()]
public static string GetPreviousFileName()
{
    //put logic here to get the filename to compare against.
    return "somefilename.ext";
}
对于如何检索文件名,您需要实现自己的逻辑。处理上一个文件名的另一种更简单但不太灵活的方法是在页面中添加一个asp:hiddenfield,并用页面加载时上一个文件的名称填充它。然后可以通过读取
$('#').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>
这里发生了几件事。我们使用pagemethod在页面加载时从page方法中提取旧文件名(
PageMethods.GetPreviousFileName
)。接下来,我们设置将由按钮onClick事件调用的函数(客户端)。
代码片段将输出文件上载控件的客户端id,以便在我们的javascript中使用。我在文件路径上做了一个子字符串,通过只回拉最后一个“\”之后的文本来提取文件名,并进行比较

正如我在函数中的注释所述,从OnClientclick事件中调用的函数返回true/false可确定是否发生回发。因此,如果用户在确认框中单击“是”,则会发生回发;否则,如果用户单击“否”,则不会发生回发


希望这至少能让你朝着正确的方向前进。

问题是,提交按钮直到很久以后,在填写其他内容之后才会出现。我想当场就做好。文件上传是否有OnChosen事件或其他事件,但当您请求客户端事件时,它们是服务器端事件。使用您声称拥有的技能编写服务器/客户端验证超出了范围。相信我,让它变得简单。什么是提交按钮?这不会运行任何检查。我不是专家,我有点新,所以任何有效的都是welcome@SuperUser555这里给出的示例将在每次上传文件时提出这个问题。它不关注是否已经上传了同名的文件,我可以判断文件是否存在,但我需要知道如何对其进行编码,以便在选择的文件与旧文件名匹配时提示…我检查文件名的逻辑是,我不知道FileUpload是否有我可以使用的事件,以及如何生成弹出窗口,我在想是否有办法在(uploadedFile.Name==existingFile.Name)然后从c#调用javascript?可以这样做吗?我发布了一个答案,但我认为这不是5年前的水平…抱歉。你不能从c#调用javascript-你的.NET代码在服务器上运行,而javascript在客户端运行。但是,你可以从c#生成document.onLoad javascript事件处理程序,当页面运行时加载到浏览器中,可以做任何你想做的事。Patrick,Clear Enough lol谢谢哇,太好了,只有一个问题。文件上传器带有一个按钮,上面写着“浏览”…如果不需要,我如何操纵它来隐藏它?我不相信你可以,但即使你可以,如果用户不能单击“浏览”按钮,如何上载文件?许多浏览器不允许复制/粘贴到文件上载框中。
<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>