Я пытаюсь передать значение выбранного элемента из текстового поля, которое было заполнено с помощью 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
, поэтому ничего не передается для пользователя, которого я выбрал в автозаполнении, должен ли я быть добавив в текстовое поле атрибут имени или есть ли лучший способ для этого?
Спасибо, это сработало. Мне нужно было сделать другое изменение, чтобы сохранить имя в этом поле и добавить идентификатор в скрытое поле, но помощник HTML был ключом к тому, что мне не хватало. – christiandev