2013-08-02 93 views
0

我正在處理asp.net mvc4中的項目。其實我在做一個表格,我有一個選擇其中包含的聯繫人列表:可以使用Ajax從控制器獲取我的數據

<select id="choix_contact"> 
    <option>Choisir un contact</option> 
     @if (ViewBag.ListeContacts != null) 
      { 
       foreach (var Contact in ViewBag.ListeContacts) 
        { 

         int index = ViewBag.ListeContacts.IndexOf(Contact); 
         <option value="index">@Contact.Nom</option> 
        } 
      } 
      else 
      { 
       <option>Pas de contact</option> 
      } </select> 

當我點擊列表中的聯繫人,我想獲得有關該聯繫人由於數據的功能,這從控制器返回Json數據。我向該函數傳遞一個參數,該參數是列表中聯繫人的索引。我的功能看起來像這樣:

public JsonResult GetContactInfo(int indexContactList) 
    { 
     int NumDossier = StructureData.DonneNumDossier((string)Session["Utilisateur"], (string)Session["MotDePasse"]); 
     List<Contact> ListeContacts = StructureData.DonneListeContact(NumDossier); 
     Contact ContactInfos = new Contact(ListeContacts[indexContactList].Nom, ListeContacts[indexContactList].Prenom, ListeContacts[indexContactList].Email, ListeContacts[indexContactList].Fonction, ListeContacts[indexContactList].TelephoneFixe, ListeContacts[indexContactList].TelephonePort); 
     return Json(ContactInfos); 
    } 

所以現在從控制器到視圖中的Ajax獲取數據,我使用該代碼:

$(document).ready(function() { 
    $("#choix_contact").change(function() { 
     var selectContact = document.getElementById('choix_contact'); 
     var index = selectContact.value; 
     var url = "/Accueil/GetContactInfo"; 
     $.getJSON(url, { indexContactList: index }, function (data) { 
      $("#nom").html(data.Nom); 
      $("#prenom").html(data.Prenom); 
      $("#email").html(data.Email); 
      $("#fonction").html(data.Fonction); 
      $("#telFix").html(data.TelephoneFixe); 
      $("#telPort").html(data.TelephonePort); 
     }); 
    }); 
    }); 

的事情,現在是它不工作所有,它甚至沒有進入ajax腳本......有人可能有一個想法?

+0

你的JS會達到哪一點?如果它確實執行了getJSON-line,那麼你會在dev-tools中看到什麼錯誤(可能是500錯誤)。 – Kenneth

+0

我看不到任何東西,當我在列表中選擇一個聯繫人時沒有任何反應...... –

+0

你在JavaScript中設置了一個斷點嗎?它受到打擊嗎?它在什麼時候出錯?你收到的錯誤是什麼? – Kenneth

回答

2

從你的意見,我看你得到以下網址:

localhost:50499/Accueil/GetContactInfo?indexContactList=index 

所以,你的價值index傳遞給你的行動方法。 index不是一個整數,這樣服務器將拋出一個500。如果你看一下錯誤,你會看到的東西沿着"cannot parse value index to System.Int32"

行你需要什麼是您的看法更改此:

int index = ViewBag.ListeContacts.IndexOf(Contact); 
<option value="index">@Contact.Nom</option> 

int index = ViewBag.ListeContacts.IndexOf(Contact); 
<option value="@index">@Contact.Nom</option> 

公告中的index面前@ -sign,這樣可以確保你輸出變量,而不是字符串。

除此之外,從您的評論我扣除你綁定數據的元素是文本框<input type="text" />。如果是這種情況,你也應該使用val-method而不是html-method:

$.getJSON(url, { indexContactList: index }, function (data) { 
      $("#nom").val(data.Nom); 
      $("#prenom").val(data.Prenom); 
      $("#email").val(data.Email); 
      $("#fonction").val(data.Fonction); 
      $("#telFix").val(data.TelephoneFixe); 
      $("#telPort").val(data.TelephonePort); 
     }); 
+0

是的,正是我所做的,當我打開Goog​​le開發人員工具,我可以看到,我得到的JSON:'電子郵件:'「 功能:null Nom:」MOCKAER「 Prenom:」Gilldas「 電話費:」02 98 25 12 27「 電話端口:」02 98 25 12 27「'但現在我不知道爲什麼我不顯示在文本框中 –

+0

如果它們是文本框,則應該使用val而不是html。檢查我編輯的答案 – Kenneth

+0

它的工作原理!非常感謝@Kenneth –

1

返回被封鎖默認JSON時,您應當允許GET請求:

return Json(ContactInfos, JsonRequestBehavior.AllowGet); 

注1:如果你已經使用了JavaScript調試工具,如螢火蟲或Chrome開發者工具欄,你會看到你的服務器返回500狀態碼,並在響應主體中發出異常,告訴您需要將JsonRequestBehavior設置爲AllowGet。異常消息並不總是很有意義,但在這種特殊情況下,您甚至可以看到異常消息甚至包含解決方案。注意2:確保從控制器操作返回的Contact類不包含任何循環引用,因爲不能JSON序列化此類結構。注意3:我建議你使用Html.DropDownListFor幫手,而不是像你的問題那樣手動建立你的下拉菜單。

+0

只是試過了,什麼都沒發生...... –

+0

你看到FireBug中服務器的響應是什麼?還要確保你的'Contact'類在它的對象圖中不包含任何循環引用,因爲你將無法使用JSON序列化它。 –

相關問題