Håller på att bygga en sida med Atlas, men kom inte på hur jag skulle lösa sökningen med Atlas så jag tänkte göra den med Ajax istället. jag har gjort detta med klassisk ASP innan, men nu vill det inte fungera. Är det någon som kan se vad jag har gjort för fel? Jag har haft alertrutor ute på sidan och de får jag fram. jag tror det är nåt i aspxfilen som inte stämmer, eventet är onkeyup. Jag får inget felmeddelande, bara den där lilla varningstriangeln nere till vänster i IE. det står "Unknown runtime error" så det är ju nåt som går galet när jag kör filen raden är över 120 men jag har bara ca: 80 rader i filen. Så det är ju inget att gå på. Jag vet inte vilka/vilken kontroll jag ska använda och jag hittar inget på nätet om det. Det är en sökfunktion jag ska göra. Den ska fungera som autocomplete men jag vill ha ut svaren i en panel eller label eller liknande. Vilken/vilka kontroller ska jag använda för att lösa det med Atlas. Det vore det bästa om det gick. > Jag får inget felmeddelande, bara den där lilla varningstriangeln nere till vänster i IE. jag får inte det att funka med nåt annat är textbox. Går det verklien att använda det till panel eller liknande? > jag får inte det att funka med nåt annat är textbox. Tror du missförtår mig lite:) Alltså givetvis måste jag skriva i en textbox men jag vill att förslagen kommer ut i en panel, label eller nåt sånt. http://www.prisjakt.nu har en sån funktion. Det är en sådan jag vill åt. Det är ju inte en autocomplete funktion du vill ha nu ju... Detta tar knäcken på mig. jag hittade en artikel på nätet som jag trodde var till hjälp. jag tycker att det borde fungera men det gör det inte. jag förstår inte riktigt var jag ska lägga koden Oskar visar heller. Jag är väldigt ny på Atlas. Hoppas ni har lite mer tålamod med mig :) Detta är bara för att testa så jag får delen av sidan att uppdateras när jag vill. Därför är koden lite luddig. Du missade följande rad som jag skrev: tackar för du inte ger upp Oskar :) Nu har jag denna kod Alltså, vad följande kod gör:Ajax ASP eller .NET
javascript:
<code>
<script language="javascript" type="text/javascript">
var xmlHttp = GetXmlHttpObject(); // Stores the object in a variable...
function showSearch(_user)
{
var user = _user;
// if (user.length >=0)
// {
// document.getElementById("laySearch").visibility = 'false';
// return;
// }
xmlHttp = GetXmlHttpObject();
if(xmlHttp == null) // If the xml object is null...
{
alert("Din webläsare stöder inte HTTP request"); // shows an alert box for the user...
return;
}
var myUrl = "searchThreadSmall.aspx"; // Building the querystring...
myUrl = myUrl + "?user=" + user;
xmlHttp.onreadystatechange = stateChanged;
xmlHttp.open("GET", myUrl, true); // Open the object...
xmlHttp.send(null); // Sends the object...
}
function stateChanged()
{
if (xmlHttp.readyState == 4 || xmlHttp.readyState=="complete") // If the transfer is complete...
{
document.getElementById("laySearch").innerHTML=xmlHttp.responseText; // Shows the result in the div...
}
}
function GetXmlHttpObject()
{
//var objXMLHttp=null;
if (window.ActiveXObject) { // IE
//alert("IE");
objXMLHttp = new ActiveXObject("Microsoft.XMLHTTP");
}
else if (window.XMLHttpRequest) // If the browser is none IE...
{
//alert("FF");
objXMLHttp=new XMLHttpRequest();
objXMLHttp.overrideMimeType("text/xml");
}
else
alert("FEL");
return objXMLHttp;
}
</script>
</code>
searchThreadSmall.aspx
<code>
<div>
<asp:GridView ID="GridView1" runat="server" DataSourceID="sdsSearch" AutoGenerateColumns="true">
</asp:GridView>
</div>
<asp:SqlDataSource ID="sdsSearch" runat="server" SelectCommandType="StoredProcedure" SelectCommand="getSearch"
ProviderName="System.Data.SqlClient" ConnectionString="<%$ ConnectionStrings:myConnString %>">
<SelectParameters>
<asp:QueryStringParameter Name="user" QueryStringField="user" />
</SelectParameters>
</asp:SqlDataSource>
</code>Sv:Ajax ASP eller .NET
Sv: Ajax ASP eller .NET
Det beror på att du inte har valt att felmeddelandena ska visas. Dubbelklicka på varningsskylten så kommer felmeddelandet upp.Sv: Ajax ASP eller .NET
Svara
Sv:Ajax ASP eller .NET
Sv: Ajax ASP eller .NET
Hela idén med autocomplete är ju att man skriver början på en text och sedan får man förslag på fortsättningar i en lista. I en panel kan man ju inte skriva något, så då är det väl inte konstigt att det inte fungerar..?Sv:Ajax ASP eller .NET
Sv: Ajax ASP eller .NET
Lägg din lista med sökresultat i en updatepanel, sätt att den ska uppdatera conditional. Se till att den triggas på textchanged-eventet på textboxen. Lägg med kod till ett attribut på textboxen i stil med:
this.textboxen.Attributes.Add("onkeypress", this.ClientScript.GetPostBackEventReference("", this.textboxen));
så kommer din lista hämtas från servern varje gång man skriver någonting. Lägg förslagsvis till ett enkelt js-test där du kollar om texten har ändrats, eller om bara t.ex. en piltangent trycktes ned. På servern uppdaterar du din lista i TextChanged-eventet för textboxen.Sv: Ajax ASP eller .NET
<code>
<div id="laySearch" style="float:left">
<asp:TextBox ID="txtSearchPost" AutoPostBack="true" runat="server" CssClass="regTex" OnTextChanged="txtSearchPost_TextChanged" /><br /><br />
</div>
<atlas:UpdatePanel ID="up3" runat="server" Mode="Conditional">
<Triggers><atlas:ControlEventTrigger ControlID="txtSearchPost" EventName="TextChanged" /></Triggers>
<ContentTemplate>
<div style="float:left;"> <asp:Label ID="lblTest" runat="server" />
<asp:GridView ID="gvSearchPost" runat="server" DataSourceID="sdsSearchPost">
</asp:GridView>
</div>
</ContentTemplate>
</atlas:UpdatePanel>
</div>
</code>
code behind
<code>
protected void txtSearchPost_TextChanged(object sender, EventArgs e)
{
lblTest.Text = txtSearchPost.Text.ToString();
}
</code>
----------------------------------------EDIT-----------------------------------------
Som det är nu får jag fram texten som jag ahr skrivit i textboxen i min label när jag lämnar fokus från textboxenSv:Ajax ASP eller .NET
this.textboxen.Attributes.Add("onkeypress", this.ClientScript.GetPostBackEventReference("", this.textboxen));
Den är kritisk då den ser till att posta sidan varje gång man trycker på ett tecken i rutan (finns det rentav ett js-event som triggas just när texten ändras och ingenting annat också?)
Sv: Ajax ASP eller .NET
<code>
protected void txtSearchPost_TextChanged(object sender, EventArgs e)
{
this.txtSearchPost.Attributes.Add("onkeypress", this.Page.GetPostBackEventReference(this.txtSearchPost));
string user = txtSearchPost.Text.ToString();
sdsSearchPost.SelectParameters.Clear();
sdsSearchPost.SelectCommand = "getSearch";
sdsSearchPost.SelectCommandType = SqlDataSourceCommandType.StoredProcedure;
sdsSearchPost.SelectParameters.Add("user", TypeCode.String, user);
sdsSearchPost.SelectParameters[0].Direction = ParameterDirection.Input;
}
</code>
Men det är som innan jag får fram rätt värde när fokus tas från textboxen.Sv:Ajax ASP eller .NET
this.txtSearchPost.Attributes.Add("onkeypress", this.Page.GetPostBackEventReference(this.txtSearchPost));
är att lägga till onkeypress="__dopoastback(blaha, blaha)" till <input>-taggen. Det måste således läggas till innan postbacken görs, dvs. i t.ex. page_load. TextChanged körs ju nämligen inte förrens vid första postbacken...