首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

AJAX回调,pageload事件有关

2012-12-17 
AJAX回调,pageload事件相关问题是这样,我在页面上有DropDownList控件 选择一个选项,这时候他的selectindex

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>

热点排行