有两个dropdownlist:drp1和drp2
drp2的内容根据drp1选取的内容而变化
有一个label,其text是 drp1.value + drp2.value
为了实现无刷新的更新,drp1,drp2和label的值的改变用javascript在客户端实现
这里label显示的内容可以改变,但是由this.LabelID.Text取到的值却一直未变
为什么?请指点,thanks
代码如下:
<%@ Page language="c#" Codebehind="PS_Add.aspx.cs" AutoEventWireup="false" Inherits="BIMS.SubModules.ProductsManage.PSAdd" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD>
<title>PSAdd</title>
<meta content="Microsoft Visual Studio .NET 7.1" name="GENERATOR">
<meta content="C#" name="CODE_LANGUAGE">
<meta content="JavaScript" name="vs_defaultClientScript">
<meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema">
<script>
function changeBigC( BigID )
{
var drpSmall = document.getElementById("DropDownListSmallC"); 
function RemoveAll(oElem)
{
var i = 0;
for( i = oElem.length; i>=0; i-- )
{
oElem.options.remove(i);
}
}
RemoveAll( drpSmall );

var oHttpReq = new ActiveXObject( "MSXML2.XMLHTTP" );
var oDoc = new ActiveXObject( "MSXML2.DOMDocument" );
oHttpReq.open( "POST", "ResponseDropChild.aspx?action=getSmallC&value=" + BigID, false );
oHttpReq.send( "" );
result = oHttpReq.responseText;
oDoc.loadXML( result );

items1 = oDoc.selectNodes( "//SmallC/Table/SmallCategory" );
items2 = oDoc.selectNodes( "//SmallC/Table/SmallID" );

var itemsLength = items1.length;
for( i = 0; i<itemsLength; i++ )
{
var newOption = document.createElement("OPTION");
newOption.text = items1(i).text;
newOption.value = items2(i).text;
drpSmall.options.add( newOption );
}

changeSmallC(document.all.DropDownListSmallC.item(document.all.DropDownListSmallC.selectedIndex).value);
}

function changeSmallC( SmallID )
{
var a = document.all;
a.LabelID.innerText = a.DropDownListBigC.item(a.DropDownListBigC.selectedIndex).value + SmallID;
getUsedID( a.LabelID.innerText );
}

function getUsedID( PC )
{
var oHttpReq = new ActiveXObject( "MSXML2.XMLHTTP" );
var oDoc = new ActiveXObject( "MSXML2.DOMDocument" );
oHttpReq.open( "POST", "ResponseDropChild.aspx?action=getUsedPSID&value=" + PC, false );
oHttpReq.send( "" );
result = oHttpReq.responseText;
oDoc.loadXML( result );

items = oDoc.selectNodes( "//UsedPSID/value" );

document.all.TBID.value = items(0).text;
}
</script>
</HEAD>
<body MS_POSITIONING="GridLayout">
<form id="Form1" method="post" runat="server">
<table width="100%" border="0">
<tr>
<td>&nbsp;</td>
</tr>
<tr>
<td align="center">
<table width="80%" border="1">
<tr>
<td style="HEIGHT: 14px" width="25%">&nbsp;<FONT face="宋体">大分类:</FONT></td>
<td style="HEIGHT: 14px" width="75%">&nbsp;
<asp:dropdownlist id="DropDownListBigC" runat="server"></asp:dropdownlist></td>
</tr>
<tr>
<td style="HEIGHT: 1px">&nbsp;<FONT face="宋体">小分类:</FONT></td>
<td style="HEIGHT: 1px">&nbsp;
<asp:dropdownlist id="DropDownListSmallC" runat="server"></asp:dropdownlist></td>
</tr>
<tr>
<td>&nbsp;<FONT face="宋体">编号:</FONT></td>
<td>&nbsp;
<asp:label id="LabelID" runat="server"></asp:label><asp:textbox id="TBID" runat="server" Width="48px"></asp:textbox><asp:requiredfieldvalidator id="RequiredFieldValidator1" runat="server" ControlToValidate="TBID" ErrorMessage="请输入3位数字编号"></asp:requiredfieldvalidator><asp:regularexpressionvalidator id="RegularExpressionValidator1" runat="server" ControlToValidate="TBID" ErrorMessage="必须位3位数字"
ValidationExpression="\d{3}$"></asp:regularexpressionvalidator></td>
</tr>
<tr>
<td style="HEIGHT: 27px">&nbsp;<FONT face="宋体">显示顺序:</FONT></td>
<td style="HEIGHT: 27px">&nbsp;
<asp:textbox id="TBShowOrder" runat="server" Width="32px">1</asp:textbox><asp:requiredfieldvalidator id="RequiredFieldValidator2" runat="server" ControlToValidate="TBShowOrder" ErrorMessage="请输入显示顺序,小值排列在前"></asp:requiredfieldvalidator><asp:regularexpressionvalidator id="RegularExpressionValidator2" runat="server" ControlToValidate="TBShowOrder"
ErrorMessage="必须为数字" ValidationExpression="^[0-9]*[1-9][0-9]*$"></asp:regularexpressionvalidator></td>
</tr>
<tr>
<td>&nbsp;<FONT face="宋体">图片:</FONT></td>
<td>&nbsp; <INPUT id="imgFile" style="WIDTH: 184px; HEIGHT: 22px" type="file" onchange="img.src=this.value;"
size="11" name="imgFile" runat="server"></td>
</tr>
<tr>
<td align="center" colSpan="2">&nbsp;
<asp:image id="img" runat="server"></asp:image></td>
</tr>
<tr>
<td align="center" colSpan="2">&nbsp;
<asp:button id="ButtonAdd" runat="server" Text="添加"></asp:button></td>
</tr>
</table>
</td>
</tr>
</table>
<FONT face="宋体"></FONT>
</form>
</body>
</HTML>//响应添加,将用户输入的内容添加到数据库
      private void ButtonAdd_Click(object sender, System.EventArgs e)
        {
            string strImagePath = imgFile.PostedFile.FileName;
            if( strImagePath == string.Empty )
            {
                Response.Write("<script>alert('请选择产品系列图片!')</script>");
                return;
            }            int index = strImagePath.LastIndexOf(".");
            string fileName = this.LabelID.Text + this.TBID.Text + strImagePath.Substring(index);
            strImagePath = @"../../pic/PS/" + fileName;
            imgFile.PostedFile.SaveAs( Server.MapPath( strImagePath ) );            string PC = this.LabelID.Text;//this.DropDownListBigC.SelectedItem.Value + this.DropDownListSmallC.SelectedItem.Value;这里this.LabelID.Text的取值未改变            Database db = new Database();
            SqlParameter[] prms = {
                                      db.MakeInParam( "@ID", SqlDbType.VarChar, 5, PC + this.TBID.Text ),
                                      db.MakeInParam( "@ImagePath", SqlDbType.VarChar, 64, @"pic/PS/" + fileName ),
                                      db.MakeInParam( "@ShowOrder", SqlDbType.Int, 4, this.TBShowOrder.Text ),
                                      db.MakeInParam( "@SmallCategory", SqlDbType.NVarChar, 8, this.DropDownListSmallC.SelectedItem.Text )
                                  };
            db.RunProc( "sp_PS_Add", prms );
        }

解决方案 »

  1.   

    你在那个页面里面最好用个hidden控件来保存你的label1的值。经常需要变值的控件,回发的数据并不依赖于ViewState。回发的控件都实现了IPostBackDataHandler接口,该接口的LoadPostData方法中,会对返回的值和ViewState中的值进行判断,如果改变了的话,调用RaisePostDataChangedEvent方法触发相应的事件(对于TextBox来说就是TextChanged事件)。LoadPostData中如果返回的值和ViewState中的值不同的话,将把TextBox的值设置成返回的值。这就是你看到的结果。而Label的值不会Post回服务器,服务器控件Label的状态是保存在ViewState里面,你在客户端改了也没有用。给你个参考解决label设置值的方法
    http://community.csdn.net/Expert/topic/3981/3981708.xml?temp=.4311792