AJAX回调,pageload事件相关

moonlightme 2010-09-13 01:25:37
问题是这样,我在页面上有DropDownList控件 选择一个选项,这时候他的selectindex肯定不为0
我有一个按钮,使用ajax回调本页面,在pageload中调用其他方法获取这个下拉列表的index. 一直是0;

是不是pageload还没走完,dropDownList的Index没有被自动赋回去?

如果是这样,那么我要在pageload中处理这个事情怎么样可以获取到准确的selectIndex(DropDownList一定要用服务器控件)
...全文
205 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
qing2005 2012-12-06
  • 打赏
  • 举报
回复
pageLoad是MS Ajax Library页面处理完之后的方法,相当于jQuery的$(document).ready(function(){}),事实上是Sys.UI.DomEvent.addHandler(window, "load", onload);添加的window.onLoad事件,通过$get("DropDownList_id").selectedIndex一定能得到当前的选中项,除非js错误(大小写等) 见部分代码:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <script type="text/javascript">
        function pageLoad() {
            alert($get("DropDownList_id").selectedIndex);
        }
    </script>
</head>
<body>
    <form id="form1" runat="server">
    
    <asp:ScriptManager ID="ScriptManager1" runat="server">
    </asp:ScriptManager>
    <asp:DropDownList ID="ddlCity" runat="server">
        <asp:ListItem Text="1" />
        <asp:ListItem Text="2" Selected="True" />
        <asp:ListItem Text="3" />
    </asp:DropDownList>

        
    </div>
    </form>
</body>
</html>
moonlightme 2010-09-14
  • 打赏
  • 举报
回复
对对对.. 迷糊了. ajax没有提交整个页面回去,服务器自然获取不到那个值..

另外问一下.. 楼上说的asp.net的AJAX是什么.. 和我现在用的js写的有什么区别么 最好有例子或者什么.. 看着有点迷糊
  • 打赏
  • 举报
回复
跟你说明白机制吧,也很简单。当asp.net ajax提交数据时,它把viewstate信息、页面提交值等传递给服务器。而你的Http Get什么也没有传递。

实际上,asp.net ajax还把服务器产生的新的viewstate、cookie等信息更新到浏览器端,这才维系了状态而不需要手动编程。你的Http Get或者post不但传得信息挂一漏万,而且根本似乎不考虑维护从服务器传回来的状态信息。
  • 打赏
  • 举报
回复
既然没有asp.net ajax中的那种维系postback的能力,就无所谓asp.net页面生命周期,就别去指望控件什么的自动处理值,就是asp而不是asp.net。
  • 打赏
  • 举报
回复
一会儿“回调”,一会儿“提交”,一会儿则是 Http Get,到底有没有谱呢?

在asp.net中,回调有其专门的概念,callback、postback都是。跟lz你的毫无关系。

而你的 Http Get,凭什么就能传送你的值1?

同时这Http Get怎么纠结到asp.net事件生命周期了呢?人家说的是postback,换句话说是asp.net ajax所执行的那种ajax能力,而不是不是你的所谓jquery ajax。
wuyq11 2010-09-13
  • 打赏
  • 举报
回复
$("#ctl00_cph_hid2").val("1");
xmlHttp.open("GET","vipMaster_Response.aspx?type=test&hid="+document.getElementById("<%=hid2%>").value, true);
moonlightme 2010-09-13
  • 打赏
  • 举报
回复
这么说吧 我有一个hiddenFiled 默认值是0,我在js里把他改为1,然后用ajax提交到后台. 不论在pageload中还是在render方法中获取到的hiddenFiled值仍然是0;



function start() {
xmlHttp = GetXmlHttpObject();

if (object.value == "无")
return;
xmlHttp.open("GET","vipMaster_Response.aspx?type=test", true);
xmlHttp.onreadystatechange = function() {
if (xmlHttp.readyState == 4) {
XXXXXXXXXXXXX
}
}
$("#ctl00_cph_hid2").val("1");
xmlHttp.send(null);
}



protected void Page_Load(object sender, EventArgs e)
{
if (Request.QueryString["type"] == "test")
{string x=hid2.value;}//这里的value仍然是默认值0;
}
protected override void Render(HtmlTextWriter writer)
{
if (Request.QueryString["type"] == "test")
{string x=hid2.value;}//这里的value仍然是默认值0;

}
porschev 2010-09-13
  • 打赏
  • 举报
回复

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>无标题页</title>
<script src="jquery-1.3.2-vsdoc.js" type="text/javascript"></script>
<script type="text/javascript">
$(function() {
$("#DropDownList1").change(function() {
var i = 0;
var ddlVal = $(this).val();
$("#DropDownList1 option").each(function() {

var oval = $(this).val();

if (oval == ddlVal) {
$("#Hidden1").val(i);
return;
}
i++;
});
form1.submit();

})
});
</script>

</head>
<body>
<form id="form1" name="form1" method="get" runat="server">
<input id="Hidden1" name="Hidden1" type="hidden" />
<asp:DropDownList ID="DropDownList1" runat="server">
<asp:ListItem>
1
</asp:ListItem>
<asp:ListItem>
3
</asp:ListItem>
<asp:ListItem>
2
</asp:ListItem>
</asp:DropDownList>
</form>
</body>
</html>

后台:

protected void Page_Load(object sender, EventArgs e)
{
if (!string.IsNullOrEmpty(Request.Params["Hidden1"]))
{
int i = Convert.ToInt32(Request.Params["Hidden1"]);
Response.Write(i);
}
}
moonlightme 2010-09-13
  • 打赏
  • 举报
回复
查询了一些资料,由于dropdownlist的viewstate问题.这种情况似乎要重写render方法.
求指点
moonlightme 2010-09-13
  • 打赏
  • 举报
回复
就是要在load事件中得到selectIndex的值

我在页面上用了Jquery的滑动层,中间某层中有这个ddl控件,和一个按钮,如果不用ajax点击这个按钮会刷新整个页面.我现在用ajax提交到后台,在后台进行处理,需要得到这个dropdownlist的selectindex. 就是得不到.里面的值都能得到

asp.net的生命周期中,把值赋给页面控件是哪一步来着.. 是不是走完了page_load才算完成
porschev 2010-09-13
  • 打赏
  • 举报
回复
AJAX 回调?

什么意思啊。。你是意思LOAD事件得到selectindex的值吗?
hizhl168 2010-09-13
  • 打赏
  • 举报
回复
页面一回调 那你selectindex的值肯定又是0了啊。
页面不回调的话用 selectedchanged事件得到。
孟子E章 2010-09-13
  • 打赏
  • 举报
回复
ajax回调?你需要在客户端得到
"xx.aspx?s=" + document.getElementById("<%=DropDownList1.ClientID%>").value
传递到后端

服务器获取
Request.QueryString["s"]
冰川711 2010-09-13
  • 打赏
  • 举报
回复
为什么要在pageload理处理呢?

dropDownList 的autopostback 得设为ture 服务器端才可收到 selectindex
dropDownList 还有个 SelectedIndexChanged事件!!!

62,025

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧