在下拉列表中获取所选值的ID

时间:2014-10-21 09:33:46

标签: c# asp.net drop-down-menu

我有一张带有Id_album属性的相册表。以及Id_song属性和Id_album作为外键属性的歌曲表。在aspx页面中,我有一个下拉列表,列出了要选择的专辑名称以获取其ID,并使用歌曲表中的Id添加该专辑*的新歌曲,具体取决于Id) 到目前为止,无论何时从下拉列表中选择一个专辑名称,我都会返回Id_album 1。换句话说,这些歌曲都被添加到Id = 1的专辑中。什么是错误的?

这是aspx页面:

public partial class newSongs : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        MusicStoreBL bl = new MusicStoreBL();
        var data = bl.GetAlbums();
         //GetAlbums is a function that returns the Id_album, AlbumName
        albums.DataSource = data;
        //albums is the HTML dropdownlist
        albums.DataTextField = "AlbumName";
        albums.DataValueField = "Id_Album";
        albums.DataBind();
    }

    protected void save_Click(object sender, EventArgs e)
    {
        Song song = new Song();
        //Song is a get/set model

        song.Id_album = int.Parse(albums.SelectedValue);

        song.SongName = songName.Text;
        song.SongAuthor = author.Text;
        song.MusicArtist = songArtist.Text;
        song.Genre = genre.Text;

        MusicStoreBL bl = new MusicStoreBL();
        bl.CreateNewSong(song);
        Response.Redirect("albumSelection.aspx");
    }
}

1 个答案:

答案 0 :(得分:1)

您应该将数据绑定代码放在以下if语句中的Page Load事件处理程序中:

if(!Page.IsPostBack)
{
    MusicStoreBL bl = new MusicStoreBL();
    var data = bl.GetAlbums();
    //GetAlbums is a function that returns the Id_album, AlbumName
    albums.DataSource = data;
    //albums is the HTML dropdownlist
    albums.DataTextField = "AlbumName";
    albums.DataValueField = "Id_Album";
    albums.DataBind();
}

这样,您只需获取一次数据,然后将它们绑定到相应的下拉列表控件。否则,每次触发回发时,例如从下拉列表控件中选择元素或单击按钮等,Page_Load中的数据绑定代码就从一开始就运行。

那么为什么你一直得到Id = 1?

每次作为Id 1获取的原因是每次单击Page_Load运行中的保存代码。发生数据绑定,下拉列表的第一项是选定的。