我有一张带有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");
}
}
答案 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
运行中的保存代码。发生数据绑定,下拉列表的第一项是选定的。