自动完成和$ .getJSON问题

时间:2011-01-05 09:49:45

标签: jquery asp.net-mvc-2 getjson

我有一个脚本:

<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();替换它,但这也没有执行。

谁能看到我在这里做错了什么?

2 个答案:

答案 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);