2014-10-21 2 views
1

У меня есть таблица Album с атрибутом Id_album. и таблица композиций с атрибутом Id_song и Id_album в качестве атрибута внешнего ключа. На странице aspx у меня есть раскрывающийся список имен альбомов, которые нужно выбрать, чтобы получить его идентификатор и использовать этот 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

Вы должны установить привязку ваших данных код в обработчик события загрузки страницы внутри следующий если утверждение:

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?

Причина, по которой вы получаете каждый раз, как идентификатор, является тем фактом, что каждый раз, когда вы нажимаете кнопку сохранения кода в Page_Load, выполняется. Связывание данных происходит, и первый элемент выпадающего списка является выбранным.

+0

блестящий !!!! спасибо вам миллион раз – mohammad

+0

You welocme dude. Я рад, что помог. – Christos

+0

@mohammad: принимайте как ответ, так как это решило вашу проблему ... что поможет другим ... :) – Riad