2013-08-04 5 views
2

Я пытаюсь передать значение выбранного элемента из текстового поля, которое было заполнено с помощью jquery Autocomplete. Это то, что я до сих пор:JQuery Autocomplete, не передающий значение контроллеру MVC

<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, поэтому ничего не передается для пользователя, которого я выбрал в автозаполнении, должен ли я быть добавив в текстовое поле атрибут имени или есть ли лучший способ для этого?

ответ

3

Попробуйте заменить свой тег ввода на идентификатор автозаполнения следующей строкой.

@Html.TextBoxFor(model => model.Recipient.ID, new { @id="autocomplete" }) 

Это поможет решить вашу проблему.

+0

Спасибо, это сработало. Мне нужно было сделать другое изменение, чтобы сохранить имя в этом поле и добавить идентификатор в скрытое поле, но помощник HTML был ключом к тому, что мне не хватало. – christiandev

Смежные вопросы