我有一个脚本:
<script type="text/javascript">
$(document).ready(function(){
$("#PrincipleMember_IdNumber").autocomplete({
close: function(event, ui) {
var member = {};
member.IDNumber = $("#PrincipleMember_IdNumber").val();
$.getJSON("<%= Url.Action("MemberLookup","Member") %>", member, function(data) {
$("#PrincipleMember_Firstname").val(data.FirstName);
});
}
});
});
表格:
<fieldset class="fieldsetSection">
<legend>Principle Member</legend>
<table>
<tr>
<td width="150px" class="editor-label"><%=Html.LabelFor(l=>l.PrincipleMember.IdNumber)%></td>
<td class="editor-field"><%= Html.AutoCompleteTextBoxFor(i => i.PrincipleMember.IdNumber, "IdNumber", "AutoComplete")%></td>
<td><%=Html.ValidationMessageFor(v => v.PrincipleMember.IdNumber)%></td>
</tr>
<tr>
<td width="150px" class="editor-label"><%=Html.LabelFor(l=>l.PrincipleMember.Firstname)%></td>
<td class="editor-field"><%=Html.TextBoxFor(t => t.PrincipleMember.Firstname)%></td>
<td><%=Html.ValidationMessageFor(v => v.PrincipleMember.Firstname)%></td>
</tr>
</table>
最后是一个json结果动作:
public JsonResult MemberLookup(Member member)
{
member = _memberRepository.GetMember(member.IDNumber);
return this.Json(member);
}
我的json结果执行得很完美,我得到了一个结果,但由于某种原因,脚本的这一部分没有执行:$("#PrincipleMember_Firstname").val(data.FirstName);
我尝试用alert();
替换它,但这也没有执行。
谁能看到我在这里做错了什么?
答案 0 :(得分:1)
我最好的猜测是(假设您的服务器端方法肯定是成功执行,并返回200 OK
),您的数据对象可能没有FirstName属性。
如果您使用Firefox,则获取FireBug,并检查数据对象的值。如果您使用的是Chrome - 请检查开发者控制台(Ctrl + Shift + I)
将$("#PrincipleMember_Firstname").val(data.FirstName);
替换为console.log(data);
并检查javascript控制台(firebug的控制台选项卡,或Chrome的开发者控制台 - &gt;控制台选项卡。您应该能够看到您的对象,以及您遇到的任何js错误可能有。
如果对象返回正常 - 请尝试console.log(data.FirstName);
如果对象不在控制台中 - 那么您的成功方法不会执行。也许服务器端调用不成功 - 尝试用$.ajax
调用替换它,并使用错误事件来查看错误。
此外,如果console.log返回undefined - 您的方法调用结果可能没有返回有效的json对象,尽管我认为查看代码的可能性很小。
答案 1 :(得分:0)
我不得不改变我的json结果:
return this.Json(member, JsonRequestBehavior.AllowGet);