автозаполнение и проблема $ .getJSON - PullRequest
0 голосов
/ 05 января 2011

У меня есть скрипт:

<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 ]

1 голос
/ 05 января 2011

Мое лучшее предположение (при условии, что ваш серверный метод определенно выполняется успешно и возвращает 200 OK), что ваш объект данных может не иметь свойства FirstName.

Если вы используете Firefox, тогда получите FireBug и проверьте значение объекта данных. Если вы используете Chrome - проверьте консоль разработчика (Ctrl + Shift + I)

Замените $("#PrincipleMember_Firstname").val(data.FirstName); на console.log(data); и проверьте консоль javascript (вкладка консоли firebug или консоль разработчика Chrome -> вкладка консоли. Вы должны увидеть свой объект и любые ошибки js, которые могут у вас возникнуть.

Если объект возвращается нормально - попробуйте console.log(data.FirstName);

Если объект не находится в консоли - тогда ваш метод успеха не выполняется. Возможно, вызов на стороне сервера не удался - попробуйте заменить его на вызов $.ajax и используйте событие error, чтобы увидеть, что не так.

Кроме того, если console.log возвращает undefined - ваш результат вызова метода, вероятно, не вернул допустимый объект json, хотя я думаю, что это будет крайне маловероятно, если посмотреть на ваш код.

0 голосов
/ 04 февраля 2011

Мне пришлось изменить результат JSON:

return this.Json(member, JsonRequestBehavior.AllowGet);
...