使用JSon在MVC3中的Autocomplete TextBox中传递locationID和位置名称

时间:2012-04-27 06:46:09

标签: json asp.net-mvc-3 jquery autocomplete

我有国家,国家的主人..... 我为位置制作了自动填充文本框。 此自动完成功能将返回这些主控的所有位置名称(所有国家/地区名称和州名称)。 我传递给jquery的所有内容都是字符串形式的位置名称。 我想将位置ID和位置名称都传递给jquery,但是只想在自动填充中显示位置名称。 由于此自动完成用于存储来自用户的优先位置。 我需要使用相应位置名称的id来在用户表中存储用户预先设置的信息。

请建议我该怎么做...... 演示将更有用.....

1 个答案:

答案 0 :(得分:0)

我假设您正在使用JqueryUI进行自动完成。默认情况下,JqueryUI的自动完成将使用w / json对象 - 更具体地说是具有属性的对象文字数组:“label”和“value”;

{ label:x, value:y }

自动填充将使用“label”属性来计算自动完成匹配,当用户选择时,将使用“value”属性作为所选项。此外,如果省略“value”属性,“label”将用于比较和选择。

需要注意的重要一点是,您不仅限于这些属性。例如,您可以添加其他属性,例如..say ..“location_id”。

{ label: "Some State and Country", location_id: 2 }

使用自动完成事件“select”,您可以采取一些操作,即将选定的location_id存储到隐藏的输入中,以便通过表单发布,甚至可以发出一声巨大的ajax调用。试试这个:

...
<form>
Locations: <input id="location" />

<input type="hidden" id="location_id" />
<input type="submit">
</form>
...

<script>
  var mylocations = [
      {
        label: "North Carolina, USA",
        id: 123
      },
      {
        label: "North Dakota, USA",
        id: 128
      },
      {
        label: "Nevada, USA",
        id: 125
      },
      {
        label: "New York, USA",
        id: 311
      },
      {
        label: "New Brunswick, Canada",
        id: 267
      },
      {
        label: "Nova Scotia, Canada",
        id: 235
      },
      {
        label: "Newfoundlandand , Canada",
        id: 223
      }];

  $("#location").autocomplete({
    source: mylocations,
    select: function( event, ui ) {
      // store your location id somewhere like a hidden input ..you
      // can then allow the user to post the form (and selected id) back. 
      $( "#location_id" ).val( ui.item.id );
      return false;
    }
  });
</script>