我的aspx页面中有以下代码:
<asp:Button id="display_button" runat="server" Text="Display" OnClick="Button1_Click" />
<asp:Button id="edit_button" runat="server" Text="Edit" OnClick="Button2_Click" />
<asp:Button id="save_button" runat="server" Text="Save" OnClick="Button3_Click" Visible="false" />
<asp:MultiView id="MultiView1" runat="server" ActiveViewIndex="0">
<asp:View id="View1" runat="server">
<asp:FormView id="view_program" runat="server">
<ItemTemplate>
<%# Eval("status").ToString().Trim() %>
</ItemTemplate>
</asp:FormView>
</asp:View>
<asp:View id="View2" runat="server">
<asp:FormView id="edit_program" runat="server">
<ItemTemplate>
<asp:DropDownList id="p_status" runat="server">
</asp:DropDownList>
</ItemTemplate>
</asp:FormView>
</asp:View>
</asp:MultiView>
以及代码隐藏页面中按钮的以下功能:
protected void Button1_Click(object sender, EventArgs e)
{
MultiView1.SetActiveView(View1);
save_button.Visible = false;
}
protected void Button2_Click(object sender, EventArgs e)
{
MultiView1.SetActiveView(View2);
save_button.Visible = true;
}
protected void Button3_Click(object sender, EventArgs e)
{
DropDownList p_status = edit_program.FindControl("p_status") as DropDownList;
var status = p_status.SelectedValue;
Label1.Text = status;
//save_button.Visible = false;
//MultiView1.SetActiveView(View1);
}
这个想法是,有两个视图,第一个显示信息,如果用户想要编辑信息,他们点击按钮2,将视图更改为编辑模式,编辑模式具有控件(下拉菜单,文本田野等)。它还会显示“保存”按钮。
我想要做的是,当单击保存按钮时,它将从各个字段中获取所有值,更新对象,然后更新数据库。然后它将使用更新的信息翻转回view1。
问题是,正如您在void Button3_Click
中看到的那样,我尝试从控件p_status中获取值,但它只获取原始值。例如,菜单有三个值,“绿色”,“黄色”和“红色”。绿色是默认值,在显示view2时选择。但是,如果我选择黄色或红色,然后单击保存,而不是更新标签以显示这两个值中的一个,它始终显示绿色。
有什么想法吗?
编辑:每个请求下面的页面加载功能
protected void Page_Load(object sender, EventArgs e)
{
try
{
Person myPerson = new Person(userid);
TestProgram myProgram = new TestProgram(id);
List<TestProgram> program = new List<TestProgram> { myProgram };
view_program.DataSource = program;
view_program.DataBind();
edit_program.DataSource = program;
edit_program.DataBind();
DropDownList p_status = edit_program.FindControl("p_status") as DropDownList;
p_status.Items.Add(new ListItem("Green", "Green"));
p_status.Items.Add(new ListItem("Yellow", "Yellow"));
p_status.Items.Add(new ListItem("Red", "Red"));
//myProgram.Status = "Red";
p_status.SelectedValue = myProgram.Status;
}
catch (Exception ex)
{
Response.Write(ex);
Label1.Text = ex.ToString();
}
}
答案 0 :(得分:0)
哎呀...错过了一点点......我的 坏
当asp.net的行为不符合预期时,这是你最好的朋友:MSDN: ASP.NET PAGE LIFECYLE
进一步审核......
这里有几个问题。 ID为“p_status”的下拉列表控件包含在多视图中(我忘记了这意味着......)您需要移动代码以在检查后将p_status填充到预渲染中看看Multiveiw1.ActiveView = View2。因为它总是回发,所以你需要在页面循环的后期绑定值