嘿,......非常简单的问题
我经常编写php,但恰好是使用ASP.NET 3.0框架进行编程,并且无法弄清楚如何解决这个问题。
我有一个DropdownList,如果我选择了一些值,...我的代码背后会做一堆东西并输出数据......
现在,...如果我重新加载页面(即按下F5或浏览器上的小重载内容)....我的所有数据都会重置,好像我的selectedIndex为0 ....但实际显示的值是我选择的前一个!...我尝试在“if ispostback = false”语句中重置我的代码中的索引...但没有任何作用......它就像值被缓存而没有我可以改变它......
...任何帮助将不胜感激:)
(进一步说明:....如果打印到我的页面加载子屏幕mydropdownlist.selectedIndex ...它将返回0 ....但是屏幕上选定的索引显然不是0。 ...我理解为什么会发生这种情况......我只需要阻止它......或者至少有一种方法可以在视图状态中确定索引......)
安德鲁
答案 0 :(得分:4)
这是表单字段的正常行为。浏览器通常会尝试记住文本字段的内容,复选框的状态以及页面重新加载和后退/前进等事件下拉列表中的选定项目。
因此,您不应假设在脚本初始化期间,表单字段的值将与您在HTML中提供的内容相匹配。让脚本嗅探当前值并在页面加载时相应地设置其变量和DOM状态。
如果您真的想要在重新加载/导航时丢弃所有用户表单字段更改,请在脚本初始化中调用form.reset()以将其返回到HTML状态。但在正常情况下,这可能对用户不利。
答案 1 :(得分:3)
听起来就像你点击f5时你没有重新加载新页面。你说当你从你的下拉列表中选择一些你做了一堆代码的东西。那个动作是一个回发。因此,在该操作之后点击f5将不会被视为对页面的新调用,因此if(IsPostBack == false)将失败,因为它是回发。
你的第一个动作导致它是一个回发,所以在那之后击中f5,将是一个回发。
听起来你可能也有一些viewstate问题,因为你的其他控件正在重置。虽然如果您使用客户端脚本执行隐藏/显示,但无论如何它们都不会通过视图状态保留。
答案 2 :(得分:1)
如果您不需要,请在复选框上尝试disabling veiwstate。
答案 3 :(得分:0)
您是否尝试在浏览器中清除缓存?大多数浏览器支持Control + F5作为硬刷新,它将清除当前页面的缓存并从服务器重新加载整个页面。
答案 4 :(得分:0)
问候, 一旦选择了另一个下拉列表中的值,我也会尝试清除下拉列表。当用户提交表单时,应该只有一个具有值的下拉列表。我已经启动了如下所示的代码,但是当选择了另一个下拉列表中的值时,下拉列表不会自动重置。我确定我错过了一些非常简单的东西,或者我的命名已经关闭。感谢。
enter code
`<%@ Page Language =“C#”AutoEventWireup =“true”CodeFile =“homepagestate.aspx.cs”inherits =“_ homepagestate”%>
< form id="form1" runat="server">
&LT; asp:DropDownList ID =“DropDownList1”runat =“server”AutoPostBack =“true”OnSelectedIndexChanged =“sel”&gt; &LT; asp:ListItem Value =“ - 选择一个或多个状态 - ”&gt;&lt; / ASP:的ListItem&GT; &LT; asp:ListItem Value =“ALABAMA”&gt;&lt; / ASP:的ListItem&GT;
< /asp:DropDownList>
&LT; asp:DropDownList ID =“DropDownList2”runat =“server”AutoPostBack =“true”&gt; &LT; asp:ListItem Value =“ - Select One - ”&gt;&lt; / ASP:的ListItem&GT; &LT; / ASP:DropDownList的&GT;
< asp:Button ID="Button1" runat="server" Text="Submit" /></div>
</form>
使用System;
使用System.Data;
使用System.Configuration;
使用System.Collections;
使用System.Web;
使用System.Web.Security;
使用System.Web.UI;
使用System.Web.UI.WebControls;
使用System.Web.UI.WebControls.WebParts;
使用System.Web.UI.HtmlControls;
public partial class _homepagestate:System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if ( !IsPostBack )
{
// sel();
DropDownList2.SelectedIndex = 0;
}
}
protected void sel(object sender, EventArgs e)
{
Response.Write(DropDownList2.SelectedIndex);
//DropDownList2.selecteditem = 0;
}
}
答案 5 :(得分:0)
这实际上是来自parrkid的另一个stackoverflow问题,但是在页面的末尾添加了这个:
<script language="javascript">
var B01 = document.getElementById('<%=YourDropDownList.ClientID%>');
B01.selectedIndex = 0;
</script>
是的......完全破解了什么可能是asp.net但恕我直言:-P