如何以与下拉列表类似的方式将键值对与textBox autoComplete扩展器相关联?
优选的是,用户不会看到该值.
我有一个ajaxtoolkit AutoCompleteExtender,其位置为:absolute.我把它放在一个位置为div的div中.这使得扩展程序下拉放置在所有浏览器上都是完美的,除了在Chrome/Safari上,其位置相对于窗口的左上角而不是div.
当我使用与为AutoCompleteExtender生成的HTML相同的css类和内联样式放置另一个ul时,定位在Chrome中正常工作.因此扩展器有一些特定的东西使它在HTML代码的底部呈现(在结束标记之前,因此在计算其位置时不使用div作为它的父级).
我有什么想法可以解决这个问题?
码:
<div class="searching">
<ajaxToolkit:AutoCompleteExtender
runat="server"
ID="biznameOrCategoryAutoComplete"
TargetControlID="txtBizNameOrCategory"
ServicePath="~/AutoComplete.asmx"
ServiceMethod="GetBiznameOrCategoryCompletionList"
MinimumPrefixLength="1"
CompletionInterval="1000"
EnableCaching="true"
CompletionSetCount="10"
CompletionListCssClass="autocomplete_completionCompyNameListElement"
CompletionListItemCssClass="autocomplete_listItem"
CompletionListHighlightedItemCssClass="autocomplete_highlightedListItem"
ShowOnlyCurrentWordInCompletionListItem="true">
</ajaxToolkit:AutoCompleteExtender>
</div>
Run Code Online (Sandbox Code Playgroud)
CSS:
.searching {
margin-left:5px;
padding-top:10px;
width:366px;
position: relative;
}
.autocomplete_completionCompyNameListElement {
background: #fff;
font-family:Arial, Helvetica, sans-serif;
font-size: 17px;
width: 340px !important;
left: 20px !important;
border: 1px solid #d9d9d9;
font-size: 12px;
top: 48px !important;
padding: 2px 4px !important;
}
Run Code Online (Sandbox Code Playgroud) 我在gridview中的模板字段中有一个texbox.对于这个文本框,我已经定义了一个autocompleteextender,其TargetControlID设置为"myTextbox",它正常工作.同时,对于OnClientItemSelected属性,我已经定义了一个javascript函数,它应该设置我的文本框的值,但我的问题是如何使用javascript获取此文本框的名称?
我的控制片段如下:
ajaxToolkit:AutoCompleteExtender TargetControlID="txtValue" onClientItemSelected="SetValue"
Run Code Online (Sandbox Code Playgroud)
我的代码看起来像这样:
function SetValue(sender, eventArgs){
var TitleValue = eventArgs.get_value();
/* do smth with this value */
/* set the new value to my textbox ? */
}
Run Code Online (Sandbox Code Playgroud)
非常感谢您的建议和想法.非常感谢!
javascript asp.net autocompleteextender asp.net-ajax ajaxcontroltoolkit
如何将其他信息传递给返回项集合的服务方法?我将尝试解释我的意思,我在表单上有2个文本框,我需要根据数据库中的特定帐户ID填写名称.所以,我需要将一个整数传递给getNamesForDropDown方法.我无法弄清楚要做什么,所以我做错了,并使用CompletionSetCount实际传递了我需要的信息:
[System.Web.Services.WebMethod]
[System.Web.Script.Services.ScriptMethod]
public string[] getNamesForDropDown(string prefixText, int count)
{
String sql = "Select fldName From idAccountReps Where idAccount = " + count.ToString();
//... rest of the method removed, this should be enough code to understand
//... the evil wrongness I did.
}
Run Code Online (Sandbox Code Playgroud)
在我的正面aspx文件中,我根据用户当前在该页面上查看的帐户ID设置了CompletionSetCount.
<ajaxtk:AutoCompleteExtender
runat="server"
ID="AC1"
TargetControlID="txtAccName"
ServiceMethod="getNamesForDropDown"
ServicePath="AccountInfo.asmx"
MinimumPrefixLength="1"
EnableCaching="true"
CompletionSetCount='<%# Eval("idAccount") %>'
/>
Run Code Online (Sandbox Code Playgroud)
所以,这绝对是一种错误的方式......什么是正确的方法?
我们有一个链接到TextBox的AutoCompleteExtender.两个控件都放在UpdatePanel中,UpdatePanel显示为使用Javascript库(Ext.BasicDialog)的弹出对话框.
弹出窗口是页面上的div,而不是单独的窗口.问题是当用户在弹出窗口内滚动时,AutoCompleteExtender会在错误的位置显示其菜单.看起来它是从弹出窗口顶部看可见距离并从弹出窗口的内部html顶部定位菜单(这是不可见的)
我们正在使用AjaxControlToolkit的1.0.20229.20821版本,我们的目标是ASP.NET Framework vewrsion 2.0.
我试图通过将以下Javascript附加到OnClientShown事件来修复菜单,但它几乎做同样的事情:
function resetPosition(object, args) {
var tb = object._element; // tb is the associated textbox.
var offset = $('#' + tb.id).offset();
var ex = object._completionListElement;
if (ex) {
$('#' + ex.id).offset(offset);
}
}
Run Code Online (Sandbox Code Playgroud) 具体来说,我有一个搜索表单,顶部有一个autocompleteextender.当您键入字符串时,它会按预期自动填充下拉列表中的匹配项.
问题是表单下方的一些SliderExtender控件出现在自动完成下拉列表上方(它没有覆盖这些控件).
我环顾四周但还没找到答案.似乎问题可能发生在其他控件上,而不是特定于这些控件.
如何动态地将参数/控制传递给contextKey?
<asp:TextBox ID="tbA" runat="server" autocomplete="off"></asp:TextBox>
<asp:TextBox ID="tbB" runat="server">hello</asp:TextBox>
<asp:TextBox ID="tbC" runat="server">world</asp:TextBox>
<cc1:AutoCompleteExtender ID="aceListA" ServiceMethod="myListServiceA" ServicePath="WebService.asmx" TargetControlID="tbA" runat="server" EnableCaching="true" UseContextKey="true"> </cc1:AutoCompleteExtender>
[WebMethod]
public string[] myListServiceA(string prefixText, int count, string contextKey)
Run Code Online (Sandbox Code Playgroud)
因为我想在Web服务级别检查tbB,tbC.我已经读过这篇文章 5次,但仍然没有理解,每半个人都缺少完整的代码.
我在ASP.net表单上有一个文本框和一个按钮,用于执行搜索.我在AJAX工具包中添加了一个autocompleteextender来显示用户输入时的建议.这样可以正常工作,但我想要发生的是当用户在显示的建议列表中选择一个项目时触发按钮的Click事件.任何人都知道如何做到这一点?
我正在使用自动完成扩展程序.
问题是当用户开始输入第二个单词并选择自动完成建议时,它会用建议替换第二个单词,但保留第一个单词.
我输入'Cherry Cobbler'
自动完成显示"沙漠,樱桃补鞋匠,1片"
当我点击自动完成建议时,它在我的文本框中最终确定为"Cherry Desert,Cherry Cobbler,1 Slice".第一个词樱桃不应该在那里.
有任何想法吗?
<asp:TextBox ID="txtLunch" CssClass="headerinput" runat="server" AutoPostBack="True" OnTextChanged="txtLunch_TextChanged"></asp:TextBox> <strong id="quantitylunch" runat="server" style="font-family: Arial; font-size: 12px; padding-right: 5px; padding-left: 5px;">Quantity</strong>
<ajaxToolkit:AutoCompleteExtender ID="AutoCompleteExtender1" runat="server" UseContextKey="true" ContextKey="" Enabled="True" ServicePath="/service/service1.asmx" ServiceMethod="GetFoodNames" MinimumPrefixLength="1" CompletionSetCount="10" TargetControlID="txtLunch" CompletionInterval="500" CompletionListCssClass="autocomplete_completionListElement" CompletionListItemCssClass="autocomplete_listItem" CompletionListHighlightedItemCssClass="autocomplete_highlightedListItem" DelimiterCharacters=";, :" ShowOnlyCurrentWordInCompletionListItem="true">
</ajaxToolkit:AutoCompleteExtender>
Run Code Online (Sandbox Code Playgroud) 我在ASP.NET/C#中使用AutoCompleteExtender从我的数据库中检索数据,以及该字段的主键.选择名称后,即使在单击"提交"之前也会检索详细信息(名称/ pk),然后将其传递到隐藏字段.
我遇到的问题是,如果用户键入的名称不正确,则pk将不会重置,并且将保持与上一次搜索相同 - 这意味着当用户单击搜索时,将显示旧数据.
这是我的自动完成服务:
public string[] GetAutoComplete(string prefixText, int count)
{
string connection = ConfigurationManager.ConnectionStrings["TestConnectionString"].ConnectionString;
string sql = "SELECT * FROM SageAccount WHERE Name LIKE @prefixText AND Customer = 1 AND SageID IS NOT NULL";
SqlDataAdapter da = new SqlDataAdapter(sql, connection);
da.SelectCommand.Parameters.Add("@prefixText", SqlDbType.VarChar, 50).Value = prefixText + "%";
DataTable dt = new DataTable();
da.Fill(dt);
List<string> Names = new List<string>();
foreach (DataRow dr in dt.Rows)
{
Names.Add(AjaxControlToolkit.AutoCompleteExtender.CreateAutoCompleteItem(dr["Name"].ToString() + " (" + dr["SageID"].ToString() + ")", dr["ID"].ToString()));
}
return Names.ToArray();
} …
Run Code Online (Sandbox Code Playgroud)