我的网页上有3个控件,下拉列表,详细信息视图和列表视图。
下拉列表控制要在详细信息视图和列表视图中显示的记录。
当detailsview进入“新”模式时,我清除详细信息视图的项目并清除下拉列表的值:
If e.CommandName = "New" Then
lvRecipeSteps.Items.Clear()
ddRecipeItemNumber.Items.Clear()
End If
这显示了下拉列表中没有项目的页面,new / insert模式下的detailsview和listview。
当我点击取消事件时会发生问题,然后执行此代码
If e.CommandName = "Cancel" Then
ddRecipeItemNumber.DataBind()
ddRecipeItemNumber.SelectedValue = Session("Id").ToString()
End If
会话变量Id在页面加载时分配
Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load
Session("Id") = ddRecipeItemNumber.SelectedValue
我收到错误:“未设置为对象的实例”指向:ddRecipeItemNumber.SelectedValue = Session(“Id”)。ToString()
我希望能够保存记录ID,即在新/插入事件开始之前的下拉列表中,然后如果事件被取消,则将控件设置回到插入/新之前显示的记录行动开始了。
我读到使用会话变量是一种很好的方法,但是我做错了,当执行事件取消时,值会丢失。
如果我能找到解决问题的方法,请告诉我。
非常感谢。
答案 0 :(得分:0)
将Session("Id") = ddRecipeItemNumber.SelectedValue
置于以下条件中:
if (!IsPostBack) { Session("Id") = ddRecipeItemNumber.SelectedValue; }
只需要将其转换为VB
更新1
如果您的代码不在Data控件中,那么您可以像下面的代码一样分配其选定的值:
在您的aspx表单上:
<asp:DropDownList ID="DropDownList2" runat="server" OnSelectedIndexChanged="DropDownList2_SelectedIndexChanged" AutoPostBack="true" ></asp:DropDownList>
关于你背后的代码:
protected void DropDownList2_SelectedIndexChanged(object sender, EventArgs e) { Session["Id"] = DropDownList2.SelectedItem.Value; }
更新2
如果您想更改代码中的选定值,这将是正确的代码:
而不是这一行ddRecipeItemNumber.SelectedValue = Session("Id").ToString()
使用这个
ddRecipeItemNumber.Items.FindByValue(Session("Id").ToString()).Selected = true;