AJAX回调,pageload事件相关
问题是这样,我在页面上有DropDownList控件 选择一个选项,这时候他的selectindex肯定不为0
我有一个按钮,使用ajax回调本页面,在pageload中调用其他方法获取这个下拉列表的index. 一直是0;
是不是pageload还没走完,dropDownList的Index没有被自动赋回去?
如果是这样,那么我要在pageload中处理这个事情怎么样可以获取到准确的selectIndex(DropDownList一定要用服务器控件)
[最优解释]
一会儿“回调”,一会儿“提交”,一会儿则是 Http Get,到底有没有谱呢?
在asp.net中,回调有其专门的概念,callback、postback都是。跟lz你的毫无关系。
而你的 Http Get,凭什么就能传送你的值1?
同时这Http Get怎么纠结到asp.net事件生命周期了呢?人家说的是postback,换句话说是asp.net ajax所执行的那种ajax能力,而不是不是你的所谓jquery ajax。
[其他解释]
<%@ 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);
}
}
[其他解释]
为什么要在pageload理处理呢?
dropDownList 的autopostback 得设为ture 服务器端才可收到 selectindex
dropDownList 还有个 SelectedIndexChanged事件!!!
[其他解释]
本帖最后由 net_lover 于 2010-09-13 13:31:01 编辑 ajax回调?你需要在客户端得到
"xx.aspx?s=" + document.getElementById("<%=DropDownList1.ClientID%>").value
传递到后端
服务器获取
Request.QueryString["s"]
[其他解释]
页面一回调 那你selectindex的值肯定又是0了啊。
页面不回调的话用 selectedchanged事件得到。
[其他解释]
AJAX 回调?
什么意思啊。。你是意思LOAD事件得到selectindex的值吗?
[其他解释]
就是要在load事件中得到selectIndex的值
我在页面上用了Jquery的滑动层,中间某层中有这个ddl控件,和一个按钮,如果不用ajax点击这个按钮会刷新整个页面.我现在用ajax提交到后台,在后台进行处理,需要得到这个dropdownlist的selectindex. 就是得不到.里面的值都能得到
asp.net的生命周期中,把值赋给页面控件是哪一步来着.. 是不是走完了page_load才算完成
[其他解释]
查询了一些资料,由于dropdownlist的viewstate问题.这种情况似乎要重写render方法.
求指点
[其他解释]
这么说吧 我有一个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;
}
[其他解释]
$("#ctl00_cph_hid2").val("1");
xmlHttp.open("GET","vipMaster_Response.aspx?type=test&hid="+document.getElementById("<%=hid2%>").value, true);
[其他解释]
既然没有asp.net ajax中的那种维系postback的能力,就无所谓asp.net页面生命周期,就别去指望控件什么的自动处理值,就是asp而不是asp.net。
[其他解释]
跟你说明白机制吧,也很简单。当asp.net ajax提交数据时,它把viewstate信息、页面提交值等传递给服务器。而你的Http Get什么也没有传递。
实际上,asp.net ajax还把服务器产生的新的viewstate、cookie等信息更新到浏览器端,这才维系了状态而不需要手动编程。你的Http Get或者post不但传得信息挂一漏万,而且根本似乎不考虑维护从服务器传回来的状态信息。
[其他解释]
对对对.. 迷糊了. ajax没有提交整个页面回去,服务器自然获取不到那个值..
另外问一下.. 楼上说的asp.net的AJAX是什么.. 和我现在用的js写的有什么区别么 最好有例子或者什么.. 看着有点迷糊
[其他解释]
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>