2

を使用して入力されたテキスト ボックスから選択した項目の値を渡そうとしていますjquery Autocomplete。これは私がこれまでに持っているものです:

<script type="text/javascript">

        $(function () {
            var userId = $('#userID').val();
            //http://techbrij.com/987/jquery-ui-autocomplete-asp-net-web-api
            $("#autocomplete").autocomplete({
                source: function (request, response) {
                    $.ajax({
                        url: "/api/Friends/" + userId,
                        type: 'GET',
                        cache: false,
                        data: request,
                        dataType: 'json',
                        success: function (json) {
                            // call autocomplete callback method with results 
                            response($.map(json, function (name) {
                                return {
                                    label: name.FullName,
                                    value: name.FriendID
                                };
                            }));
                        },
                        error: function (XMLHttpRequest, textStatus, errorThrown) {
                            $("#autocomplete").text(textStatus);
                        }
                    });
                },
                select: function (event, ui) {
                    alert('you have selected ' + ui.item.label + ' ID: ' + ui.item.value);
                    $('#autocomplete').val(ui.item.label);
                    return false;
                },
                messages: {
                    noResults: '',
                    results: function () {
                    }
                }
            });
        });

    </script>

意見

@using (Html.BeginForm()) {
    @Html.AntiForgeryToken()
    @Html.ValidationSummary(true)
    <fieldset>
        <legend>MailMessage</legend>
        <div class="editor-label">
            @Html.LabelFor(model => model.Recipient.ID)
        </div>
        <div class="editor-field">
            <input type="text" id="autocomplete" />
        </div>
        <div class="editor-label">
            @Html.LabelFor(model => model.Subject)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.Subject)
            @Html.ValidationMessageFor(model => model.Subject)
        </div>
        <div class="editor-label">
            @Html.LabelFor(model => model.Message)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.Message)
            @Html.ValidationMessageFor(model => model.Message)
        </div>

        <p>
            <input type="submit" value="Create" />
        </p>
    </fieldset>
}

コントローラ

[HttpPost]
public ActionResult Compose(MailMessage mailMessage)
{
    mailMessage.MailDate = DateTime.Now;
    mailMessage.Recipient = UserManager.GetFullUser(mailMessage.Recipient.ID);
    mailMessage.Sender = SDSession.SDUser;
    mailMessage.MessageId = Guid.NewGuid();

    MailMessageManager.AddMailMessage(mailMessage);
    return View("Inbox");
}

これは縮小版ですが、問題を示しています。からデータを取得する際に問題なく動作しapiます。必要なユーザーを選択して送信ボタンを押しますが、コントローラー内ではMailMessageオブジェクトが必要なため、オートコンプリートで選択したユーザーには何も渡されません。name 属性をテキストボックスに追加するか、これを行うためのより良い方法はありますか?

4

1 に答える 1