none
请问asp.net ajax的autocomplete extender 在实际使用中,如果目标textbox的值是数字值(真正要插入的值是ID)而非字符值怎么办? RRS feed

  • 问题

  • 也许题目有点拗口,我的意思是:比如在listview的insert模板中,有个字段是通过外键查找得到其ID值,字段是int型的。而且这个外键表可能上千,这样通过
    Asp.net ajax的aut complete extender 来调用web service,找到符合要求的最少的记录,但这是下拉表里提示的是和ID相关的字段,比如名字。选择后,名字就跳到textbox框里了。但是最终数据库做insert时,这个textbox帮顶的主表的字段是int的,这个问题各位TX是如何解决的?
    2009年11月5日 3:39

答案

  • 你需要使用一个隐藏的控件记录id值。
    【孟子E章】
    • 已标记为答案 KeFang Chen 2009年11月11日 4:10
    2009年11月5日 5:23
    版主
  • 楼主的基本思想是对的。取得ID和Name,可以把id作为<option>的id即可,如孟老师所言,在你把文字赋给textbox的时候,顺便把对应的id记录到某个隐藏字段。然后通过ajax取得隐藏字段的值进行处理。
    Microsoft Online Community Support
    • 已标记为答案 KeFang Chen 2009年11月11日 4:10
    2009年11月6日 2:46
  • 这要看你的取舍了。

    1.如果你要完美的用户体验,那么你可以保持AutoCompleteExtender显示和提交文本,同时在ListView的OnItemInserting和OnItemUpdating截获提交上来的字符串,再转换为整形ID,才交给DataSource控件处理。

    2.如果你需要全自动的Binding,你可以让AutoCompleteExtender显示整形ID和字符串,同时选中后只出现整形ID。例如输入123,提示“123456(姓名)”,选中后文本框变为123456。
    Microsoft ASP.NET MVP
    • 已标记为答案 KeFang Chen 2009年11月11日 4:11
    2009年11月6日 16:05
    版主

全部回复

  • 你需要使用一个隐藏的控件记录id值。
    【孟子E章】
    • 已标记为答案 KeFang Chen 2009年11月11日 4:10
    2009年11月5日 5:23
    版主
  • 你需要使用一个隐藏的控件记录id值。
    【孟子E章】
    谢谢,问题是这个ID如何赋值给隐藏的绑定了真正的字段的Textbox_B控件呢? 下午我刚做了个webservice,已经可以输入第1个汉字,接着把需要查找的表的Name查找出来了。
         我的一个初步想法是否对,请各位大侠指正:在webservice中,取出ID,Name 两字段,中间加个@或者|字符,然后赋值给要return的string[],这样在页面看起来,下拉列表里查找出来的是选项像 "100@张三","101@李斯" 之类,点击其中一项赋值给被非绑定字段的textbox_A控件,然后,到下个字段时,textbox_A控件发生ontextchanged事件,在这个事件里,我可以把100,101等ID截取,并赋值给隐藏的textbox_B控件(绑定了ID字段的)。
         这样做行不行?有无更简便的方法?
    2009年11月5日 13:21
  • 不知道 autocomplete extender 是否有这样的功能,你要清楚原理:在显示中文的时候,同时加一句 document.getElementById("HiddenID").value="xxxx"

    别人的东西不是说什么都做了,自己写这样的功能比较符合自己的需求,道理很简单,就是ajax取数据,没有什么难度

    【孟子E章】
    2009年11月6日 1:47
    版主
  • 楼主的基本思想是对的。取得ID和Name,可以把id作为<option>的id即可,如孟老师所言,在你把文字赋给textbox的时候,顺便把对应的id记录到某个隐藏字段。然后通过ajax取得隐藏字段的值进行处理。
    Microsoft Online Community Support
    • 已标记为答案 KeFang Chen 2009年11月11日 4:10
    2009年11月6日 2:46
  • 这要看你的取舍了。

    1.如果你要完美的用户体验,那么你可以保持AutoCompleteExtender显示和提交文本,同时在ListView的OnItemInserting和OnItemUpdating截获提交上来的字符串,再转换为整形ID,才交给DataSource控件处理。

    2.如果你需要全自动的Binding,你可以让AutoCompleteExtender显示整形ID和字符串,同时选中后只出现整形ID。例如输入123,提示“123456(姓名)”,选中后文本框变为123456。
    Microsoft ASP.NET MVP
    • 已标记为答案 KeFang Chen 2009年11月11日 4:11
    2009年11月6日 16:05
    版主