如何检查asp:fileupload中的重复文件名?

时间:2014-03-19 18:09:31

标签: asp.net

我有一个updatepanel,里面的contenttemplate是一个asp:FileUpload ..现在我将尝试选择我想检查数据库中的文件名的文件..我知道我的数据库部分,但我将如何调用服务器中的函数就像asp:TextBox我可以使用OnTextChanged这样的东西..但对于asp:FileUpload有什么我可以检查文件名而不点击按钮添加?我的代码

<asp:UpdatePanel runat="server" ID="fileupdatepanel">
                <ContentTemplate>
            <asp:FileUpload ID="tutorialupload" runat="server" AutoPostBack="true" OnLoad="filename_Changed" />
                    <asp:Label runat="server" ID="f1"></asp:Label>
                    </ContentTemplate>
                </asp:UpdatePanel>
        <asp:Button ID="addbttu" runat="server" Text="Add" OnClick="addtutorial_Click" /> 

我的aspx.cs代码

    protected void filename_Changed(object sender, EventArgs e)
{
string con = " ";
con = ConfigurationManager.ConnectionStrings["ConnectionString"].ToString();
SqlConnection objsqlconn = new SqlConnection(con);
objsqlconn.Open();
string tuname = tutorialupload.PostedFile.FileName;
tuname = tuname.Substring(0, tuname.LastIndexOf("."));
SqlCommand objcmd = new SqlCommand("Select tutorialid from tutorialtable where tutorialname='" + tuname + "'", objsqlconn);
SqlDataReader grpIDreader = objcmd.ExecuteReader();
grpIDreader.Read();
if (grpIDreader.HasRows)
{
    f1.Text = "Duplicate filename.Sorry.";
}
else
{
    f1.Text = "";
}

objsqlconn.Close();
}

现在当我选择文件时...我想调用这个函数filename_Changed(),它会给我结果文件名是否存在。所以我想这样做而不点击我的添加按钮? ?

2 个答案:

答案 0 :(得分:1)

你应该使用has file属性,当你检查是否为真时,就像这样

protected void  UploadButton_Click(object sender, EventArgs e)
{
    if (FileUpload1.HasFile) 
        // Before attempting to save the file, do something
    else
      // Notify the user that a file was not uploaded.
      UploadStatusLabel.Text = "You did not specify a file to upload.";
}

答案 1 :(得分:0)

以下是使用JavaScript通过FileUpload onChange事件检测所选文件名的更改的方法。

ASPX页面:确保在ScriptManager对象中设置EnablePageMethods = true。

<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true"></asp:ScriptManager>
<asp:UpdatePanel runat="server" ID="fileupdatepanel">
    <ContentTemplate>
        <asp:FileUpload ID="tutorialupload" runat="server" OnChange="CheckFileName(this)" />
            <asp:Label runat="server" ID="f1"></asp:Label>
     </ContentTemplate>
 </asp:UpdatePanel>
 <asp:Button ID="addbttu" runat="server" Text="Add" OnClick="addtutorial_Click" /> 

<强> JavaScript的:

function CheckFileName(oFile) 
{
    PageMethods.FileNameChecker(oFile.value, OnSucceeded); 
}

function OnSucceeded(result, userContext, methodName) 
{   
    lbl = document.getElementById('<%=f1.ClientID %>'); 

    if (methodName == "FileNameChecker") 
    { 
        if (result == true) 
        { 
            lbl.innerHTML = 'Duplicate filename.Sorry.'; 
            lbl.style.color = "red"; 
        } 
        else 
        { 
            lbl.innerHTML = ''; 
        } 
    } 
} 

C#Code-Behind:您可以调用WebMethod来检查数据库中是否存在新选择的文件名:

您需要参考以下内容:

using System.Web.Services;

然后添加以下方法并确保在方法声明之前放置[WebMethod]

[WebMethod]
public static bool FileNameChecker(string newFileName)
{
    string con = " ";
    con = ConfigurationManager.ConnectionStrings["ConnectionString"].ToString();

    SqlConnection objsqlconn = new SqlConnection(con);
    objsqlconn.Open();

    string x = newFileName.Substring(0,newFileName.LastIndexOf("\\"));
    string tuname = newFileName.Substring(newFileName.LastIndexOf("\\") + 1, newFileName.Length - x.Length - 1);
    tuname = tuname.Substring(0, tuname.LastIndexOf("."));

    SqlCommand objcmd = new SqlCommand("Select tutorialid from tutorialtable where tutorialname='" + tuname + "'", objsqlconn);
    SqlDataReader grpIDreader = objcmd.ExecuteReader();

    grpIDreader.Read();        

    bool found = false;

    if (grpIDreader.HasRows)
        found = true;

    objsqlconn.Close();
    return found;
}