后台脚本 protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            showlist();
            dlcolumn.Attributes.Add("onchange", "__doPostBack(this.value,'')");
           
        }
            } protected void dlcolumn_TextChanged(object sender, EventArgs e)
    {
        string id = Request.Form["__EVENTTARGET"];        if (id !=null)
        {
            columndomain.Text = id;
        }
    }
html代码 <input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" />
<input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" />
<input type="hidden" name="__LASTFOCUS" id="__LASTFOCUS" value="" />
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKMTgyNTM4MzgzOA9kFgICAw9kFgICAQ8QD2QWAh4Ib25jaGFuZ2UFG19fZG9Qb3N0QmFjayh0aGlzLnZhbHVlLCcnKRAVBwzkuIDnuqfnsbvliKsY5Lit5Zu95paw6Ze7ICAgICAgICAgICAgGS3ph43luobmlrDpl7sgICAgICAgICAgICAZLeWNl+WyuOaWsOmXuyAgICAgICAgICAgIBkt5rWZ5rGf5paw6Ze7ICAgICAgICAgICAgGOWFqOeQg+imgemXuyAgICAgICAgICAgIBkt576O5Zu95paw6Ze7ICAgICAgICAgICAgFQcBMAExATIBNgEzATQBNRQrAwdnZ2dnZ2dnFgFmZGTXwBDIAWhZbCfae49eLY0DcrRpuw==" />
</div><script type="text/javascript">
<!--
var theForm = document.forms['form1'];
if (!theForm) {
    theForm = document.form1;
}
function __doPostBack(eventTarget, eventArgument) {
    if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
        theForm.__EVENTTARGET.value = eventTarget;
        theForm.__EVENTARGUMENT.value = eventArgument;
        theForm.submit();
    }
}
// -->
</script><select name="dlcolumn" onchange="__doPostBack(this.value,'');setTimeout('__doPostBack(\'dlcolumn\',\'\')', 0)" id="dlcolumn" style="width:153px;">
<option selected="selected" value="0">一级类别</option>
<option value="1">中国新闻            </option>
<option value="2">-重庆新闻            </option>
<option value="6">-南岸新闻            </option>
<option value="3">-浙江新闻            </option>
<option value="4">全球要闻            </option>
<option value="5">-美国新闻            </option></select>
问题是  有时候控件 columndomain显示的值是数字  正常的  有时侯它显示的值是 dlcolumn 郁闷 请大家帮我解决啊 

解决方案 »

  1.   

    实在没搞懂。执行的第1个dopostback后,后面的一般都不会运行吧看运气?
      

  2.   

    1.
    看不懂你的代码意图 ....
    2.
    ASP.NET 内置的回发函数 __doPostBack(eventTarget, eventArgument) 的第一个参数 eventTarget 应该表示的是客户端 html 元素的 name 属性,而不是随意的什么 value 之类,这是内部机制!故,假如你准备手动注册回发时间,应该是dlcolumn.Attributes.Add("onchange", "__doPostBack(this.name,'')");3.
    当然,这种方式会导致安全漏洞,你最好使用 // 1.x
    Page.GetClientScriptPostBackEventReference(...)
    // 2.0
    Page.ClientScript.GetClientScriptPostBackEventReference(...)方法注册客户端回发事件
    4. 我猜想你的 select 已经加上了 runat=server 了,变成了服务器事件,且注册了 TextChanged 事件那么你已经无需手动的注册一次了你没发现onchange="__doPostBack(this.value,'');setTimeout('__doPostBack(\'dlcolumn\',\'\')', 0)"中出现了,两次 doPostBack 调用嘛?获取选中值,请使用 dlcolumn.Value 或者 Request.Form[dlcolumn.UniqueID]5.
    已经有 DropDownList 控件封装了此功能,请选用 DropDownList6.
    不要什么事情都想当然去处理,请理解之 ....
      

  3.   

    <select id="dlcolumn" runat=server OnServerChange=dlcolumn_TextChanged>