MVC: установить значение при автозаполнении при редактировании - PullRequest
2 голосов
/ 14 мая 2009

В нашем приложении MVC мы используем управление автозаполнением jQuery на нескольких страницах. Это прекрасно работает на Create, но я не могу заставить его работать на Edit.

По сути, я не знаю, как заставить элементы автозаполнения предварительно загружать данные из модели и при этом вести себя как автозаполнение, если пользователь хочет изменить значение.

Также, как я могу убедиться, что значение отображается в том же формате, который используется в вызовах Create?

Все наши элементы управления автозаполнением имеют соответствующие контроллеры и все результаты анализа Json.

1 Ответ

0 голосов
/ 28 декабря 2011

Давайте попробуем это! Хорошо, сделай это: Предположим, у вас есть список стран, которые вам нужно отфильтровать Автозаполнение знает, как по умолчанию некоторые вещи по умолчанию, но предположим, что вы действительно хотели CountryName, а также вы знаете, что каждое нажатие клавиши делает ajax-вызов на указанный вами URL. Создайте метод действия, например, так:

  public ActionResult LookupCountry(string q, int limit)
  {
      var list = GetListOfCountries(q, 0, limit);
      var data = from s in list select new {s.CountryName};
      return Json(data);
  }

Вот Jquery:

$(document).ready( function() {
  $('#txtCountryName').autocomplete('<%=Url.Action("LookupCountry", "MyController") %>', {
      dataType: 'json',
      parse: function(data) {
          var rows = new Array();
          for(var i=0; i<data.length; i++){
              rows[i] = { data:data[i], value:data[i].CountryName,          result:data[i].CountryName};
          }
          return rows;
      },
      formatItem: function(row, i, n) {
          return row.CountryName;
      },
      width: 300,
      mustMatch: true,
  });
});

Вот HTML

<html><head></head><body>@Html.TextBox("txtCountryName",Model.CountryName)</body></html>

В основном, магия в вызове LookUpCountry GetCountriesList (строковый запрос, int startindex, int limit) Возвращает MyCountries.Where(c => c.CountryName.SubString(startindex, limit).Contains(query)).ToList();

Итак, вы создаете свою собственную функцию обрезки, потому что JQuery не знает, что такое CountryName или как его обрезать. Как бы то ни было, если бы это был объект javascript, я не совсем уверен, но делаю

var jsonString = @Html.GetListOfCountries() //Or Model.Countries.ToJSONString()  
var json = JSON.stringify(jsonString); //also JSON.Parse(jsonString) if stringify won't work

, который возвращает необходимые страны в качестве метода расширения Html Helper. И, возможно, в виде списка объектов javascript он будет достаточно умен, чтобы справиться с этим на родном языке. Однако первый подход работает для меня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...