1

所以,这个问题已经出现了几次,通常是“输入”,大多数都在 MVC3 中。我希望事情发生了变化。我正在使用 jquery 和自动完成功能,并且想要保存“值”而不是“标签”。但是,用户需要看到有意义的标签,而不是用户不关心的主键中的随机数。

也许是因为我是从 webforms 开始的,但我很惊讶 MVC 控件似乎完全失去了将值与文本分离的概念。惊讶地认为问题可能是我错过了一些东西,

那么如何在不需要隐藏字段和模型属性的情况下保存值并在此文本框中显示所选项目的标签?在这种情况下,ContactName 是要保存的重要值。

剃刀

     @Html.TextBoxFor(x => x.Issue.ContactNameDisplay, new { style = "width: 100%", id = "ContactNameDisplay" })
@Html.HiddenFor(x => x.Issue.ContactName, new {id = "ContactName"})

自动完成

$('#ContactNameDisplay').autocomplete(
       {
           dataType: 'json',
           source: function (request, response) {
               $.get('@Url.Action("LoadAdFullNames", "Order")', { phrase: request.term }, function (data) {
                   response($.map(data, function (item) {
                       return {
                           label: item.Text,
                           value: item.Value,
                       };
                   }));
               });
           },
           select: function (event, ui) {
               event.preventDefault();
               $('#ContactName').val(ui.item.val);
               $(this).val(ui.item.val);
              $(this).text(ui.item.label);       //Breaks Here
               $.get('@Url.Action("LoadPhoneNumber", "Order")', { windowsId: ui.item.value }, function (data) {
                   $('#ContactPhone').val(data.toString());
               });

           },
           focus: function (event, ui) {
               event.preventDefault();
               $(this).text(ui.item.label);
           },
       });
4

1 回答 1

0

输入元素没有 text 属性。

$(this).val(ui.item.label);  // Show the value in the textbox

将信息存储在HTML-5 data-* 属性中

    $(this).data('key', ui.item.val); 

要检索密钥,您可以使用

$(this).data('key')
于 2013-08-06T20:19:11.600 回答