ASP.NET和C#FileUpload

时间:2011-06-28 13:11:36

标签: c# javascript asp.net

我有一个用于图片的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岁。

我真的很感激帮助。

2 个答案:

答案 0 :(得分:0)

将以下代码添加到您的提交按钮

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

编辑,正如有人指出这会问这个问题而不考虑以前的文件和新文件。它将完成基本工作。

我的问题是你是在编辑模式还是在新项目模式下执行此操作。我的意思是你在编辑项目或在你想检查的页面上添加新项目吗?

答案 1 :(得分:0)

我的解决方案将在回发之前执行检查。我也稍微使用了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,并在页面加载时使用前一个文件的名称填充它。然后,您可以通过阅读$('#<%= 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:按钮指定了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从页面加载(PageMethods.GetPreviousFileName)的页面方法中提取旧文件名。接下来我们设置将由onClick事件(客户端)按钮调用的函数。 <%=fu.ClientID %>代码片段将输出文件上传控件的客户端ID,以便在我们的javascript中使用。我在文件路径上做了一个子字符串,并通过仅拉回最后一个'\'之后的文本来提取文件名并进行比较。

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

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