2012-05-10 57 views
1

我對jQuery和JSON相當陌生,遇到了一個我一直無法解決的問題。我有一個文本框,我希望用戶輸入一個人的姓名,當他/她選擇姓名時,它會自動填充其電子郵件地址的另一個文本框。jQuery自動完成和aspx/json

我的代碼如下。任何幫助得到這個工作將不勝感激。非常感謝!

標記

<input type="text" id="person_name" class="required" /> 
<input type="text" id="person_email_address" class="required email" /> 

jQuery的

$("input#person_name").autocomplete({ 
    source: "/autoComplete.aspx", 
    dataType: "json", 
    minLength: 1, 
    select: function(event, ui) { 
     //set email textbox to the email field of the selected item. 
    } 
}); 

autoComplete.aspx.cs

​​
+0

上的代碼快速提示:考慮使用參數化查詢,而不是防止SQL注入漏洞,並嘗試使用一個網頁或Web服務一個WebMethod的數據與'name'強類型對象的數組返回,' email'和'value'屬性,.NET會自動轉換爲JSON。 – GregL

+0

就像在新方法之上拍[WebMethod]屬性一樣簡單?我將如何從jQuery中調用它?由戴維·沃德鏈接到他的超級有用的ASP.NET –

+1

看到這個神奇的網頁符合jQuery的博客文章 - 我學到最多的東西我知道它來自他:http://encosia.com/jquery-for-the-asp -net-developer/ – GregL

回答

1

使用這樣的事情在你的後臺代碼:

var items = dt.AsEnumerable().Select(
    dr => new 
    { 
     name = dr["first_name"].ToString() + dr["last_name"].ToString(), 
     email = dr["email"].ToString() 
    } 
); 
string json = "[" + string.Join(",", 
     items.Select(i => 
      "{ id: '" + i.name + "'" 
      + ", label: '" + i.name + "'" 
      + ", value: '" + i.email + "'" 
      + "}" 
     ) 
    ) + "]"; 

Response.Write(json); 

這應該會得到正確的JSON,其中的名稱爲作爲標籤,而的電子郵件地址爲作爲值。現在,在選擇的Javascript回調函數,設置電子郵件文本框中正確的值:

select: function(event, ui) { 
    //set email textbox to the email field of the selected item. 
    $("#person_email_address") = ui.item.value; 
} 

注意

每註釋,上面的是未經修改無效。 JSON值必須用雙引號括起來。

+0

這實際上非常有幫助。我實際上使用2.0,所以我沒有linq不幸的是(應該標籤/值字符串看起來像[{id:'name1',label:'name1',value:'email1'}},{id: 「名2」,標籤:「名2」,值:?。「EMAIL2」}] –

+0

@ user1174729是的,沒錯哎喲上沒有LINQ的我想你就必須構建JSON內循環,然後 – McGarnagle

+1

感謝您的?在這一個幫助,我最終得到它的工作...我曾與一些JSON格式的問題。我不得不換我的標籤和值雙蜱(「),而不是單一的蜱(') –