问题是这样,我在页面上有DropDownList控件 选择一个选项,这时候他的selectindex肯定不为0
我有一个按钮,使用ajax回调本页面,在pageload中调用其他方法获取这个下拉列表的index. 一直是0;是不是pageload还没走完,dropDownList的Index没有被自动赋回去? 如果是这样,那么我要在pageload中处理这个事情怎么样可以获取到准确的selectIndex(DropDownList一定要用服务器控件)

解决方案 »

  1.   

    为什么要在pageload理处理呢?dropDownList 的autopostback 得设为ture 服务器端才可收到 selectindex 
    dropDownList 还有个 SelectedIndexChanged事件!!! 
      

  2.   

    本帖最后由 net_lover 于 2010-09-13 13:31:01 编辑
      

  3.   

      页面一回调 那你selectindex的值肯定又是0了啊。
    页面不回调的话用 selectedchanged事件得到。
      

  4.   

    AJAX 回调?什么意思啊。。你是意思LOAD事件得到selectindex的值吗?
      

  5.   

    就是要在load事件中得到selectIndex的值我在页面上用了Jquery的滑动层,中间某层中有这个ddl控件,和一个按钮,如果不用ajax点击这个按钮会刷新整个页面.我现在用ajax提交到后台,在后台进行处理,需要得到这个dropdownlist的selectindex. 就是得不到.里面的值都能得到asp.net的生命周期中,把值赋给页面控件是哪一步来着.. 是不是走完了page_load才算完成
      

  6.   

    查询了一些资料,由于dropdownlist的viewstate问题.这种情况似乎要重写render方法.
    求指点
      

  7.   


    <%@ 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);
            }
        }
      

  8.   

    这么说吧 我有一个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;}
      

  9.   

    $("#ctl00_cph_hid2").val("1");
    xmlHttp.open("GET","vipMaster_Response.aspx?type=test&hid="+document.getElementById("<%=hid2%>").value, true);
      

  10.   

    一会儿“回调”,一会儿“提交”,一会儿则是 Http Get,到底有没有谱呢?在asp.net中,回调有其专门的概念,callback、postback都是。跟lz你的毫无关系。而你的 Http Get,凭什么就能传送你的值1?同时这Http Get怎么纠结到asp.net事件生命周期了呢?人家说的是postback,换句话说是asp.net ajax所执行的那种ajax能力,而不是不是你的所谓jquery ajax。
      

  11.   

    既然没有asp.net ajax中的那种维系postback的能力,就无所谓asp.net页面生命周期,就别去指望控件什么的自动处理值,就是asp而不是asp.net。
      

  12.   

    跟你说明白机制吧,也很简单。当asp.net ajax提交数据时,它把viewstate信息、页面提交值等传递给服务器。而你的Http Get什么也没有传递。实际上,asp.net ajax还把服务器产生的新的viewstate、cookie等信息更新到浏览器端,这才维系了状态而不需要手动编程。你的Http Get或者post不但传得信息挂一漏万,而且根本似乎不考虑维护从服务器传回来的状态信息。
      

  13.   

    对对对.. 迷糊了. ajax没有提交整个页面回去,服务器自然获取不到那个值..另外问一下.. 楼上说的asp.net的AJAX是什么.. 和我现在用的js写的有什么区别么 最好有例子或者什么.. 看着有点迷糊
      

  14.   

    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>