因为在项目的发票管理中,用户要求在弹出的对话框(网页)中选择单位后,返回原来页面,并且将单位值填充进来!
实际上 单位的 选择涉及三个部分:

联动下拉菜单 AjaxPro + JS

联动下拉菜单 AjaxPro + JS<td align="center" style="height: 30px">
联动下拉菜单 AjaxPro + JS            
&nbsp;&nbsp;&nbsp; 位<span style="color:Red">*</span></td>
联动下拉菜单 AjaxPro + JS        
<td style="height: 30px" >
联动下拉菜单 AjaxPro + JS            
<input id="inp_iComId" type="hidden" name="inp_iComId" runat="server" />
联动下拉菜单 AjaxPro + JS            
<asp:textbox id="tb_vComName" runat="server" Width="80%" ReadOnly="true"></asp:textbox>
联动下拉菜单 AjaxPro + JS            
<onclick="return SelectCompany();" href="#"><img src="Images/search.gif" style="border:0" alt="检索" /></a>
联动下拉菜单 AjaxPro + JS            
联动下拉菜单 AjaxPro + JS            
<asp:RequiredFieldValidator ID="RequiredFieldValidator3" runat="server" ControlToValidate="tb_vComName"
联动下拉菜单 AjaxPro + JS                Display
="Dynamic" ErrorMessage="*"> </asp:RequiredFieldValidator>
联动下拉菜单 AjaxPro + JS        
</td>
1、input隐藏表单,保存单位ID
2、textbox保存单位名称
3、img单击弹出对话框

本例中代码涉及比较多,所以只贴出相关代码:
该页面中,js selectCompany和相关函数
联动下拉菜单 AjaxPro + JS<script language="javascript" type="text/javascript">
>

在该页的cs文件中:
引用了AjaxPro.dll
联动下拉菜单 AjaxPro + JS[AjaxPro.AjaxMethod]
联动下拉菜单 AjaxPro + JS        
public DataTable GetContract(string icomid)
        }

在被打开的对话框中(openwindow中)
联动下拉菜单 AjaxPro + JS    <script type="text/javascript" language="javascript">
联动下拉菜单 AjaxPro + JS        
var ctrlValue    //传递的主键参数
联动下拉菜单 AjaxPro + JS
        var ctrlNameValue
联动下拉菜单 AjaxPro + JS        
function GetDetail(sid,sName)
>

在向父窗体中赋值以后,就可以调用父页中的函数ReRender(); 来重新绘制Selector下拉列表;

本例中调用了 ajaxpro但是具体的配置很简单,关键是要了解 ajaxpro在js和c#类型 type之间如何调用的关系:
比如我要是想连续初始化多个数据部分,比如说:重新绘制两个Select控件(dropdownlist在客户端的控件)
我就可以返回一个dataset
然后在 callback(res)函数中
    可以这样得到 DataTable在js中的对象
               var ds = res.value;
联动下拉菜单 AjaxPro + JS            
var tbl = ds.Tables[0]; 
然后再调用 就可以了!

但是,注意的是在ds中添加数据表 DataTable的时候,可能会遇到DataTable已经被另一个DataSet包含的错误;
我的服务端c#代码是这么写的:

联动下拉菜单 AjaxPro + JS[AjaxPro.AjaxMethod]
联动下拉菜单 AjaxPro + JS        
public DataSet GetContract(string icomid, string isortid)
        }

其实Ajaxpro在使用的时候可以根据服务端返回的对象灵活使用,具体的问题下面会描述:
Ajaxpro的效率就是很大的问题;
我曾经在一个AjaxPro的CallBack函数后面紧跟了另一个Ajaxpro的js请求函数;
结果发现没有响应,怎么调试都不行;后来发现在那个请求结束时,添加 alert("!!")提示框就可以了?(到现在无解)
但是,即使那个请求的CallBack函数有响应,却发生了新的问题;

    发现第一个CallBack成功执行;
    第二个CallBack执行填充的下拉菜单,Asp.NET不能识别填充的 options
    Html里面明明是有options;但是就是在服务端的 XXX . SelectedValue="" 取不到值;
最后没有办法了,将两级关系统统放到服务端,然后返回一个DataSet(这个东西就像一个包,什么都可以往里面放)

在客户端读取的代码:(只有部分)

联动下拉菜单 AjaxPro + JS//选定原计划、合同赋值、绑定新计划

代码很乱,就提到这里了吧!
留个问题给大家:ajaxpro怎么应用web窗体下的变量(this.Somevariable)?


相关文章: