【问题标题】:FileUpload1 does not exist in current contextFileUpload1 在当前上下文中不存在
【发布时间】:2017-10-03 15:47:17
【问题描述】:

我正在尝试创建一个网站,允许用户上传歌曲并下载已上传的任何歌曲。我正在使用 MySQL 来存储任何上传的歌曲。我认为我的 HTML 和 C# 代码是正确的,但它一直向我抛出一个错误,说 FileUpload1 在当前上下文中不存在,您可以使用导航栏来切换上下文。我的C#代码如下。

using System;
using System.Collections.Generic;
using System.Web;
using System.Xml.Linq;
using System.Web.UI;
using System.Web.UI.WebControls;
using MySql;
using MySql.Data;
using MySql.Data.MySqlClient;
using System.IO;
using System.Text;
using System.Web.UI.WebControls.WebParts;
using System.Configuration;

public partial class Default3 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{

}
protected void btnUpload_Click(object sender, EventArgs e)
{

    using (BinaryReader br = new BinaryReader(FileUpload1.PostedFile.InputStream))
    {
        byte[] bytes = br.ReadBytes((int)FileUpload1.PostedFile.InputStream.Length);
        string strConnString = "server=localhost;user id=root;database=music;persistsecurityinfo=True";
        using (MySqlConnection con = new MySqlConnection(strConnString))
        {
            using (MySqlCommand command = new MySqlCommand())
            {
                con.Open();


                string SQL = "insert into tblFiles(Name, ContentType, Data) values (@Name, @ContentType, @Data)";
                command.CommandText = SQL;
                command.Parameters.AddWithValue("@Name", Path.GetFileName(FileUpload1.PostedFile.FileName));
                command.Parameters.AddWithValue("@ContentType", "audio/mpeg3");
                command.Parameters.AddWithValue("@Data", bytes);
                command.Connection = con;
                command.ExecuteNonQuery();
                con.Close();
            }
        }
    }
    Response.Redirect(Request.Url.AbsoluteUri);

}

}

这是我的网站 HTML:

<%@ Page Title="" Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="Music.aspx.cs" Inherits="Default3" %>
<asp:Content ID="music" runat="server" ContentPlaceHolderID ="ContentPlaceHolder1">
<asp:FileUpload ID="FileUpload1" runat="server"/>
<asp:Button ID="btnUpload" runat="server" Text="Upload" 
    onclick="btnUpload_Click"/>
<hr/>
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false" RowStyle-BackColor="#A1DCF2" Font-Names = "Arial" Font-Size = "10pt"
HeaderStyle-BackColor="#3AC0F2" HeaderStyle-ForeColor="White">
    <Columns>
        <asp:BoundField DataField="Name" HeaderText="FileName"/>
        <asp:TemplateField>
            <ItemTemplate>
                <object type="application/x-shockwave-flash" data='dewplayer-vol.swf?mp3=File.ashx?Id=<%# Eval("Id") %>'
                    width="240" height="20" id="dewplayer">
                    <param name="wmode" value="transparent"/>
                    <param name="movie" value='dewplayer-vol.swf?mp3=File.ashx?Id=<%# Eval("Id") %>'/>
                </object>
            </ItemTemplate>
       </asp:TemplateField>
        <asp:HyperLinkField DataNavigateUrlFields="Id" Text = "Download" DataNavigateUrlFormatString = "~/File.ashx?Id={0}" HeaderText="Download"/>
   </Columns>
</asp:GridView>
    </asp:Content>

【问题讨论】:

  • Offtopic:我首先建议摆脱 Flash 对象并为此使用 HTML5。看w3schools.com/html/html5_audio.asp
  • 您的代码看起来不错。尝试再次删除并添加控件。有时,当从某个地方复制代码时,VS 会有点困惑,并且不会将 Control 添加到设计器文件中。
  • 检查您是否有另一个部分类定义共享名称 Default3
  • 您的命名空间规范在哪里?不应该有一个吗? namespace MyProject {。查看为您的 aspx 生成的代码,它应该指定命名空间是什么。您的代码隐藏应该在同一个命名空间中以访问相同的对象,对吧?

标签: c# mysql asp.net visual-studio


【解决方案1】:

您的代码后面定义了一个部分类“Default3”。我假设您的 aspx 页面名为“Default3”,并且 Visual Studio 已生成代码来实例化该 aspx 页面中的元素。生成的代码也是部分类“Default3”,但您会注意到在生成的代码中,部分类是在命名空间下定义的。您后面的代码没有在任何命名空间下定义该类的其余部分,因此它无权访问相同的对象。看起来您在某些时候从您的代码中删除了命名空间规范。

【讨论】:

    猜你喜欢
    • 2019-08-05
    • 2023-03-30
    • 2020-03-10
    • 2017-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多