我最近在做一个很简单的网页,用的是C#。其中有一个功能是这样的,有三个文本框,textbox1和textbox2相应onchange事件去调用一个js function 把两个textbox的值相加显示在第三个textbox中。结果出现了个问题让我非常困扰,我的页面时在vs2005里做的,做完之后F5运行,没有问题。但是我把这个页面复制到我的iis下然后访问,结果页面不响应我的onchange事件,我查看HTML源代码发现,textbox1和textbox2的onchange事件都不见了。回到vs2005,F5,运行正常,查看HTML源代码,textbox1和textbox2的onchange事件也都在。同样是一个页面文件,同样是一台电脑,只是IIS一个是vs的一个是windows的,结果就不同。以下是我的代码:CS:
public string CTL;
protected void Page_Load(object sender, EventArgs e)
{
    CTL = txbUploadFileDescription.UniqueID; //取得本页面里某个控件的UniqueID
    CTL = CTL.Replace("txbUploadFileDescription", "");
    CTL = CTL.Replace("$", "_")  //取得本页面所有控件ID的前缀     txbClaimAmount.Attributes.Add("onchange", "Javascript:GetTotalAmount()");
    txbClaimGST.Attributes.Add("onchange", "Javascript:GetTotalAmount()");
}ASPX
    <script language="javascript" type="text/javascript">
        function GetTotalAmount()
        {
            var CTL = "<%=CTL %>";
            var txbClaimAmount = document.getElementById(CTL + "txbClaimAmount");
            var txbClaimGST = document.getElementById(CTL + "txbClaimGST");
            var txbClaimTotalAmount = document.getElementById(CTL + "txbClaimTotalAmount");
            var Amount = 0;
            var GST = 0;
            var Total = 0;
            if(isNaN(txbClaimAmount.value) == false)
            {
                if(txbClaimAmount.value > 0)
                {
                    Amount = txbClaimAmount.value;
                }
            }
            if(isNaN(txbClaimGST.value) == false)
            {
                if(txbClaimGST.value > 0)
                {
                    GST = txbClaimGST.value;
                }
            }
            Total = parseFloat(Amount) + parseFloat(GST);
            txbClaimTotalAmount.value = Total.toFixed(2);
        }
    </script>HTML 源代码
F5运行:<input name="ctl00$ContentPlaceHolder1$txbClaimAmount" type="text" id="ctl00_ContentPlaceHolder1_txbClaimAmount" onchange="Javascript:GetTotalAmount()" />在IIS下运行: <input name="ctl00$ContentPlaceHolder1$txbClaimAmount" type="text" id="ctl00_ContentPlaceHolder1_txbClaimAmount" />其他都一样,包括javascript获得的CTL(UniqueID的前缀)。页面里还有其他的js,是用validator调用的,连个环境运行都正常。请指教,谢谢!

解决方案 »

  1.   

    的确,onchange事件是html控件的。
    我的onchange是用aspx控件.Attributes.Add()方法添加的,这个不就是给渲染后的HTML控件添加事件吗?
    我错了吗?谢谢指教。
      

  2.   

    你直接在IIS建个虚拟目录 把整个网站都弄个进去,试一下呢,为何偏要复制一个页面呢?
      

  3.   

    F5运行有,IIS没有?
    运行环境不对,可能你IIS设置的ASP.NET 版本不对
      

  4.   

    问题已经解决,zkcq2004 正解。感谢!也感谢所有帮我解决问题的朋友。
      

  5.   

    Master页面<%@ Master Language="C#" AutoEventWireup="true" CodeFile="MasterPage.master.cs" Inherits="MasterPage" %><!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 language="javascript" type="text/javascript"> 
            function GetTotalAmount(textBox1, textBox2, textBox3) 
            { 
                document.getElementById(textBox3).value = parseFloat(document.getElementById(textBox1).value) + parseFloat(document.getElementById(textBox2).value); 
            } 
        </script> 
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
            <asp:contentplaceholder id="ContentPlaceHolder1" runat="server">
            </asp:contentplaceholder>
        </div>
        </form>
    </body>
    </html>MyContent.aspx<%@ Page Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="MyContent.aspx.cs" Inherits="MyContent" Title="Untitled Page" %>
    <asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
        <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
        <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
        <asp:TextBox ID="TextBox3" runat="server"></asp:TextBox>
    </asp:Content>MyContent.aspx.cspublic partial class MyContent : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            TextBox1.Attributes.Add("onchange", "GetTotalAmount('" + TextBox1.ClientID + "','" + TextBox2.ClientID + "','" + TextBox3.ClientID + "')");
            TextBox2.Attributes.Add("onchange", "GetTotalAmount('" + TextBox1.ClientID + "','" + TextBox2.ClientID + "','" + TextBox3.ClientID + "')");
        }
    }
      

  6.   

    感谢amandag的回复问题已经解决,我认为js放在masterpage里应该和放在content里是一样的,无论哪个先加载最终都是会写到html里。