用户控件xfp.ascx内几个TextBox,如:数量、单价、总价
使用AJAX技术,使总价自动计算出来:
xfp.ascx.cs 中-----------------------------------------------------------------------private void Page_Load(object sender, System.EventArgs e)
{
Ajax.Utility.RegisterTypeForAjax(typeof(xfp));
k_name.Text=name;     //用户控件的一个自定义属性:货物名称
k_xh.Text=xh;         //用户控件的一个自定义属性:货物型号
k_sl.Text=sl;         //用户控件的一个自定义属性:数量
K_dj.Text="0.00";     //单价-文本框
k_zj.Text="0.00";     //总价-文本框
}[Ajax.AjaxMethod()]
public string Getzj(string str)
{
double d_dj=Convert.ToDouble(str);          //单价
double d_sl=Convert.ToDouble(sl);           //数量,能否如此直接用控件的属性值?
double d_zj=d_dj*d_sl;
return d_zj.ToString();                     //返回总价
}
xfp.ascx 中-----------------------------------------------------------------------<%@ Control Language="c#" AutoEventWireup="false" Codebehind="xfp.ascx.cs" Inherits="sys.ck.xfp"%>
<table width="586" cellpadding="0" cellspacing="0">
<tr>
............略...........
<asp:TextBox id="k_dj" runat="server" Width="100" onblur="xfp_Ajax()">0</asp:TextBox>
<asp:TextBox id="k_zj" runat="server" Width="100">0</asp:TextBox>
............略...........
</tr>
</table><script language="javascript">
  function xfp_Ajax()
  {
  var first=document.getElementById("<%=k_dj.ClientID%>");
  xfp.Getzj(first.value,callback_Setzj);
  }
  function callback_Setzj(res)
  {
  var obj=document.getElementById("<%=k_zj.ClientID%>");
  obj.value=res.value;
  }
</script>
-------------------------------------------------------------------------------
另外,此用户控件被父页面循环载入了若干次:
int i=0;
foreach (DataRow dlrow in mysele.Rows)
{
xfp myfp = (xfp)LoadControl("xfp.ascx");      //载入控件...若干次
myfp.ID = "myfp_"+i.ToString();
myfp.Name = dlrow["name"].ToString();
myfp.Xh = dlrow["xh"].ToString();
myfp.Sl = dlrow["sl"].ToString();
Panel1.Controls.Add(myfp);
i++;
}
测试了代码,结果只是最后一次载入的用户控件的总价框有反应,但得到的值也不对...对JS不大懂,还望大家赐教!
谢谢!

解决方案 »

  1.   

    1.在用户控件的page_load中为<asp:TextBox id="k_dj" runat="server" Width="100" onblur="xfp_Ajax()">0</asp:TextBox>
    注册事件:
    k_dj.attribute.add("onblur","document.getElementById('" + k_zj.ClientID +"').value=PageClass.Getzj.value")//上面的PageClass指:调用该用户控件的页面的类名2.一下内容写在调用该用户控件的页面的cs中:
    [Ajax.AjaxMethod()]
    public string Getzj(string str)
    {
    double d_dj=Convert.ToDouble(str);          //单价
    double d_sl=Convert.ToDouble(sl);           //数量,能否如此直接用控件的属性值?
    double d_zj=d_dj*d_sl;
    return d_zj.ToString();                     //返回总价
    }
      

  2.   

    <asp:TextBox id="k_dj" runat="server" Width="100" onblur="xfp_Ajax()">0</asp:TextBox>
    --〉
    <asp:TextBox id="k_dj" runat="server" Width="100">0</asp:TextBox>
      

  3.   

    k_dj.attribute.add("onblur","document.getElementById('" + k_zj.ClientID +"').value=PageClass.Getzj.value")--〉
    k_dj.attribute.add("onblur","document.getElementById('" + k_zj.ClientID +"').value=PageClass.Getzj(document.getElementById('"+ k_dj.ClientID  +"').value,document.getElementById('"+ k_sl.ClientID  +"').value ).value;")即public string Getzj(string 单价, string数量)