私のページ(ddlProgram)に、次のようなデータベースクエリを介して入力されるドロップダウンリストがあります。
Using dbContext as IRFEntities = New IRFEntities
Dim getPrograms = (From p in dbContext.IRF_Program _
Order By p.name _
Select p)
ddlProgram.DataSource = getPrograms
ddlProgram.DataTextField = "name"
ddlProgram.DataValueField = "id"
ddl.Program.DataBind()
End Using
したがって、たとえば、「Education」のDataTextFieldと「221」のIDを持つ場合があります。
ここで、サイトにアクセスした個人に関する情報(利用可能な場合)をフォームに事前入力します。これには、次のようなドロップダウンリストが含まれます。
If getProspect IsNot Nothing Then
If getProspect.user_id Is Nothing Then
ddlProgram.SelectedValue = getProspect.Program
End If
End If
Programプロパティには、プログラムのIDと一致する番号が含まれています。したがって、たとえば、この個人は、上記の教育の「221」と一致する「221」のプログラムを持っている可能性があります。
現在、アプリケーションはDropDownList(ddlProgram)のSelectedValueを "221"に正常に設定しますが、DDLのSelectedItemは同じままです(たとえば、事前入力後にIDが"1"の最初の"History"の場合は" IDが「221」の「履歴」)。
私が実現しようとしているのは、SelectedItemがSelectedValueに対応するアイテムに更新されることです。したがって、最終的に、フォームが事前入力されたときに個人が「教育」に対して「221」を選択した場合、選択されたアイテムとして教育が表示され、選択された値が正しく設定されますが、現在、フォームには間違ったSelectedItemが表示されていますしかし、舞台裏では正しいSelectedValueがあります。
Page_Loadイベントからのコードフローのより完全なアイデアは次のとおりです。
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Page.IsPostBack = False Then
' If prospect is coming from unique url
Dim prospect_url As String = Page.RouteData.Values("value")
' Save prospect_url into session variable
Session("prospect_url") = prospect_url
Using dbContext As IRFEntities = New IRFEntities
' Prepopulate the programs dropdown.
Dim getPrograms = (From p In dbContext.IRF_Program _
Order By p.name _
Select p)
ddlProgram.DataSource = getPrograms
ddlProgram.DataTextField = "name"
ddlProgram.DataValueField = "id"
ddlProgram.DataBind()
End Using
Using dbContext As IRFEntities = New IRFEntities
' Prepopulate the states dropdown.
Dim getStates = (From p In dbContext.IRF_States _
Order By p.name _
Select p)
ddlState.DataSource = getStates
ddlState.DataTextField = "name"
ddlState.DataValueField = "id"
ddlState.DataBind()
End Using
Using dbContext As IRFEntities = New IRFEntities
' Grab info. about prospect based on unique url.
Dim getProspect = (From p In dbContext.IRF_Prospects _
Where p.url = prospect_url _
Select p).FirstOrDefault
' If they have a record...
If getProspect IsNot Nothing Then
If getProspect.user_id Is Nothing Then
' Prepopulate the form with their information.
' These must have a value, so we need to make sure that no column is null in the database.
ddlProgram.SelectedValue = getProspect.program
txtFirst.Text = getProspect.first_name
txtLast.Text = getProspect.last_name
txtAddress.Text = getProspect.address
txtCity.Text = getProspect.city
ddlState.SelectedValue = getProspect.state
txtZip.Text = getProspect.zip
txtPhone.Text = getProspect.phone
txtEmail.Text = getProspect.email_address
txtYearEnrolling.Text = getProspect.enrolling_in
Else
' Redirect them to login.
Response.Redirect("login.aspx")
End If
End If
End Using
End If
End Sub