文本框的jquery自动完成:不同的值和文本

文本框的jquery自动完成:不同的值和文本,jquery,asp.net-mvc,Jquery,Asp.net Mvc,所以,这个问题已经出现了好几次,通常是“input”的问题,而且大多数都在MVC3中。我希望情况有所改变。我正在使用jquery和autocomplete,希望保存“value”而不是“label”。然而,用户需要看到有意义的标签,而不是用户不关心的主键中的随机数 也许是因为我从webforms开始,但我很惊讶MVC控件似乎完全失去了将值与文本分开的概念。惊讶地认为问题可能是我遗漏了什么 那么,在不需要隐藏字段和模型属性的情况下,如何在此文本框中保存值并显示选定项的标签呢?在这种情况下,Cont

所以,这个问题已经出现了好几次,通常是“input”的问题,而且大多数都在MVC3中。我希望情况有所改变。我正在使用jquery和autocomplete,希望保存“value”而不是“label”。然而,用户需要看到有意义的标签,而不是用户不关心的主键中的随机数

也许是因为我从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);
           },
       });

输入元素没有文本属性。

$(this).val(ui.item.label);  // Show the value in the textbox
将信息存储在HTML-5数据-*属性中

    $(this).data('key', ui.item.val); 
要检索密钥,只需使用

$(this).data('key')

TextBox呈现为
TextBoxFor是一个返回输入的html帮助程序。你说得对,我重新检查了。我脑子里想的就是editorFor的功能。要在表单提交中检索数据,有没有关于放置位置的建议?或者我最好改成一个文本区域,使“看起来”像一个文本框?这个值永远不会被用户看到。因此,在submit上,您只需在submit事件中访问该字段并将其传递给DB即可<代码>$('id或class')。数据('key')
应该为您提供特定的值从Web表单到MVC时,需要记住的一件重要事情是,在MVC中没有控件,只有助手。帮助程序只是用于呈现HTML的方便方法。MVC中唯一“丢失”的是单片viewstate,它使所有数据看起来都在那里。它最终都以HTML的形式呈现,如果是web表单,你会得到一个巨大的隐藏输入,带有加密的viewstate。是的,我并不是想总体上对web表单感到遗憾,只是好像我经历了很多麻烦。我想最初MVC确实给人一种“一切都到哪里去了”的印象因为它正回归到web的真正无状态本质和客户机-服务器模型的范例,在这种模式下,您并不总是像在桌面应用程序中那样拥有可用的信息,这就是web窗体要在web上模拟的内容。