我正在使用asp.net mvc4开发一个项目。实际上我正在做一个表格,其中我有一个包含联系人列表的选择:
<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 Data的函数。我传递给函数一个参数,该参数是列表中联系人的索引。我的功能看起来像这样:
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 :(得分:2)
根据您的评论,我看到您收到以下网址:
localhost:50499/Accueil/GetContactInfo?indexContactList=index
所以你将值index
传递给你的action-method。 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方法而不是html方法:
$.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);
});
答案 1 :(得分:1)
在返回默认阻止的JSON时,您应该允许GET请求:
return Json(ContactInfos, JsonRequestBehavior.AllowGet);
注意1:如果您使用了诸如FireBug或Chrome Developer工具栏之类的javascript调试工具,您会看到您的服务器返回500状态代码,并且在响应正文中有一个异常,告诉您需要将JsonRequestBehavior设置为AllowGet。异常消息并不总是非常有意义,但在这种特殊情况下,您看到的异常消息甚至包含解决方案。
注意2:确保从控制器操作返回的Contact
类不包含任何循环引用,因为您无法JSON序列化此类结构。
注意3:我建议您使用Html.DropDownListFor
帮助程序,而不是手动构建问题中显示的下拉列表。